478. 在圆内随机生成点
今天的每日一题是在圆内随机生成点,难度为中等,具体做法如下
- 在圆外切矩形内撒点采样。
- 如果采样的点在圆内,返回;否则重新采样。
- 由于二维的每一维都是均匀分布的,所以结果也是均匀分布的。
class Solution {
private:
double r, x, y;
public:
Solution(double radius, double x_center, double y_center) {
r = radius;
x = x_center;
y = y_center;
}
vector<double> randPoint() {
while (1) {
double cx = 2 * r * rand() / RAND_MAX - r + x;
double cy = 2 * r * rand() / RAND_MAX - r + y;
if ((cx - x) * (cx - x) + (cy - y) * (cy - y) <= r * r)
return {cx, cy};
}
}
};