478. 在圆内随机生成点/C++

在这里插入图片描述
拒绝采样:如果生成的点不符合条件就再生成一次,直至生成的点符合条件

rand() 返回一随机数值的范围在 0 至 RAND_MAX 间。
(double)rand()/RAND_MAX就是0~1.0
2 * (double)rand()/RAND_MAX - 1.0就是-1.0~1.0

class Solution {
public:
    Solution(double radius, double x_center, double y_center)
    		:r(radius),xc(x_center),yc(y_center) {}
    
    vector<double> randPoint() {
        while(true){
            double x = (2 * (double)rand()/RAND_MAX - 1.0) * r;
            double y = (2 * (double)rand()/RAND_MAX - 1.0) * r;
            if (x * x + y * y <= r * r) 
                return {xc + x, yc + y};
        }
    }
    
private:
    double r,xc,yc;
};
/**
 * Your Solution object will be instantiated and called as such:
 * Solution* obj = new Solution(radius, x_center, y_center);
 * vector<double> param_1 = obj->randPoint();
 */

猜你喜欢

转载自blog.csdn.net/Zolewit/article/details/89485421