首页 > 其他 > 详细

LeetCode 478 Generate Random Point in a Circle 在圆中生成随机点

时间:2021-01-03 10:50:40      阅读:31      评论:0      收藏:0      [点我收藏+]
LeetCode 478 Generate Random Point in a Circle 在圆中生成随机点
题目

技术分享图片

题意

给你一个圆的半径和圆心坐标,编写函数randPoint 函数返回在圆内的随机点

分析

题意很简单,是生成随机数的变种,这里的随机变成了两维,且随机值为浮点型

我们可以使用 随机点与x轴构成的夹角θ作为随机变量,这种情况下

$x=xCenter+cos(θ)*radius $

\(y=yCenter+sin(θ)*radius\)

对于浮点型随机变量的生成可以采用两者方法

STL函数直接生成
default_random_engine random; //随机种子
uniform_real_distribution<double> dis(low,upper); //设置随机数范围
cout<<dis(random); //生成随机数

该方法是c++11算法中的新特性,随机性效果更好,操作简单

使用原始的Rand进行处理

原始Rand返回值的范围为0-RAND_MAX;

可以使用 (double)rand()/RAND_MAX; 的方法来产生介于0-1之间的浮点数

代码
class Solution {
public:
    const double PI = 3.14159265358979732384626433832795;
    double m_radius, m_x_center, m_y_center;
		
    double uniform() {
        return (double)rand() / RAND_MAX;
    }
    
    Solution(double radius, double x_center, double y_center) {
        m_radius = radius; m_x_center = x_center; m_y_center = y_center;
    }
    
    vector<double> randPoint() {
        double theta = 2 * 3.14159265358979323846264 * uniform();
        double r = sqrt(uniform());
        return vector<double>{
            m_x_center + r * m_radius * cos(theta),
            m_y_center + r * m_radius * sin(theta)
        };
    }
};

LeetCode 478 Generate Random Point in a Circle 在圆中生成随机点

原文:https://www.cnblogs.com/bean-boom/p/14224841.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!