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

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

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)
        };
    }
};
上一篇:IDEA使用Mybatis-generator自动生成代码


下一篇:SignatureTest相关文件,Generate源码公布 By:Yose