原题链接:478. 在圆内随机生成点
solution:
如果生成的点在圆内,那么一定满足以下关键式子:
x - r <= x + a * r <= x + r, y - r <= y + b * r <= y + r
因此本题的关键就是计算出a 和 b的值,a和b应该取-1 ~ 1之间的数,可以利用rand()函数实现。
rand() / RAND_MAX * 2 - 1;
该函数可以获取-1~1中的随机数,最后利用以勾股定理算一下在不在半径为1的圆形内,不在就重做:
r * a + x, r * b + y
完整答案:
class Solution {
public:
double r,x,y;
Solution(double radius, double x_center, double y_center) {
r = radius;
x = x_center;
y = y_center;
}
vector<double> randPoint() {
double a = (double) rand() / RAND_MAX * 2 - 1;
double b = (double) rand() / RAND_MAX * 2 - 1;
if(a * a + b * b > 1) return randPoint();
return {x + r * a,y + r * b};
}
};