w****o 发帖数: 2260 | 1 不知道这个题的确切描述了,
好像大概是给一个圆盘,如何产生一个随机的东西,能让打中盘上的位置的概率是
uniform distribution.好像是要考虑面积。圆盘不同的半径所处的圆的面积也不同。
谁能记起来这个题到底说的是什么? | b***e 发帖数: 1419 | 2 Find a random value r1 between [0,1], let a = r1*2*PI, that's the angle.
Find a random value r2 between [0,1], let r = sqrt(r2), that's the radius.
The trick is not to use r2 as r directly. | c*****n 发帖数: 96 | 3 pair generatePoint(double r){
// assumption: the center point of circle is (0,0), radui is r
double x = 0.0;
double y = 0.0;
do{
x = (rand(1) - 0.5)*r; //rand(n) returns a random double between [0,
n]
y = (rand(1) - 0.5)*r;
}while ( x*x + y*y <= r*r);
return new pair(x,y);
} | g*********e 发帖数: 14401 | 4 楼上方法比较直白
用微积分的思想随机取也可以,distribution func. P(r=r')=2r'/R 半径=r的概率跟r
成正比
取完半径,再随机产生个角度,在圆环上取个点就行了。 | b***e 发帖数: 1419 | 5 Yes, the question is how to realize the function to get the radius. I've
indicated that it's in fact the square root.
跟r
【在 g*********e 的大作中提到】 : 楼上方法比较直白 : 用微积分的思想随机取也可以,distribution func. P(r=r')=2r'/R 半径=r的概率跟r : 成正比 : 取完半径,再随机产生个角度,在圆环上取个点就行了。
|
|