ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-01-03 10:04:04  阅读:208  来源: 互联网

标签:center Point double Random uniform radius 随机 MAX Generate


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

image-20210103093237002

题意

给你一个圆的半径和圆心坐标,编写函数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)
        };
    }
};

标签:center,Point,double,Random,uniform,radius,随机,MAX,Generate
来源: https://www.cnblogs.com/bean-boom/p/14224841.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有