在圆内随机生成点
编号:0028
题目描述
给定圆的半径和圆心的x
和y
坐标,写一个在圆中产生均匀随机点的函数randPoint
说明:
- 输入值和输出值都将是浮点数
- 圆的半径和圆心的x、y坐标将作为参数传递给类的构造函数
- 圆周上的点也认为在圆中
randPoint
返回一个包含随机点的x
坐标和y
坐标的大小为2的数组
解答算法
解答思路
这道题大概有两种解答思路,第一种是拒绝采样,就是选取一个更容易随机生成的图形,例如一个正方形,让其边长为半径,那么显然很容易做到在正方形中随机产生一个点,然后只要判断该点是否在圆内即可。
正方形中随机生成点
double x = r * (double)rand() / RAND_MAX; //这里rand()产生的数一定小于RAND_MAX,因此后面产生了一个0~1之间的随机数
double y = r * (double)rand() / RNAD_MAX;
判断该点是否在圆内
while(x * x + y * y > r * r)//判断点是否在圆内
另一种方法就是用极坐标的思路,在圆内随机进行取点。
这里我们选用先取角度theta
,再取半径tmpR
的方法。
首先先取角度theta
,角度360,被选中的等可能的,因此简单的取随机数就可以了