LeetCode每日一题(2022/6/5)478. 在圆内随机生成点(中等)

给定圆的半径和圆心的位置,实现函数 randPoint ,在圆中产生均匀随机点。

实现 Solution 类:

Solution(double radius, double x_center, double y_center) 用圆的半径 radius 和圆心的位置 (x_center, y_center) 初始化对象
randPoint() 返回圆内的一个随机点。圆周上的一点被认为在圆内。答案作为数组返回 [x, y] 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/generate-random-point-in-a-circle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


不用想的很复杂,随机生成,滤过不合条件的点就行

class Solution {
public:
    double x, y;
    double r;
    Solution(double radius, double x_center, double y_center)
        : r(radius), x(x_center), y(y_center) { 
        srand((unsigned)time(NULL));
    }
    
    vector<double> randPoint() {
        while (true) {    
            double rx = ((double)rand() / RAND_MAX) * r * 2 + x - r;
            double ry = ((double)rand() / RAND_MAX) * r * 2 + y - r;
            if ((rx - x) * (rx - x) + (ry - y) * (ry - y) <= r * r) {
                return vector<double>{ rx, ry };
            }
        }
    }
};

/**
 * 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();
 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值