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