class Solution {
private:
double c_radius;
double xcenter;
double ycenter;
public:
Solution(double radius, double x_center, double y_center) {
c_radius = radius;
xcenter = x_center;
ycenter = y_center;
}
vector<double> randPoint() {
double randomradius= (sqrt((double)rand()) / RAND_MAX) * c_radius;
double randomangle= ((double)rand() / RAND_MAX) * 360.0;
double yp= sin(randomangle)*randomradius;
double xp= cos(randomangle)*randomradius;
std::vector<double> point= {xp+xcenter, yp+ycenter};
return point;
}
};
大家好,我正在做一个关于寻找一个圆圈内的随机点Leet代码问题。它一切顺利,直到以下测试:* * 输入值:**[0.01、-73839.1、-3289891.3]
它本质上是在一个圆内生成一个随机点,但我的结果似乎被四舍五入,我不知道为什么。
- 生成点后我的输出:**
[null,[-73839.10**000**,-3289891.30**000**],[-73839.10**000**,-3289891.30000],[-73839.10000,-3289891.30000],[-73839.10000,-3289891.30000],[-73839.10000,-3289891.30000]...
- 预期产出**
[null,[-73839.10**006**,-3289891.30**228**],[-73839.10**541**,-3289891.30660],[-73839.10634,-3289891.30124],[-73839.10256,-3289891.30684],[-73839.09825,-3289891.29962]...
现在我的问题是错误在哪里?我的数学有问题吗?结果很接近,但还不够接近。我似乎不能准确指出这个错误发生在哪里。任何帮助都非常感谢。
2条答案
按热度按时间mqkwyuun1#
用你目前的方法你将不会得到均匀的分布(即使弧度是固定的)。点将集中在一个中心。
Task description说点分布假设是均匀的,但我怀疑是否编写了适当的统计检验。
与其复杂化,不如在包含圆的正方形中随机选取坐标,并不断生成这个点,直到它适合圆。
k4emjkb12#
谢谢大家的帮助。看来我有
sqrt()
操作在错误的地方。使用sqrt()
后,我计算的结果rand()/RAND_MAX
通过测试。(感谢chrysante)完整的代码:此代码通过了所有Leetcode测试。
rand()/RAND_MAX
的平方根结果是必要的,否则它将抛出相同的错误,在原来的职位。