假设我们具有圆心的半径和xy位置,我们必须编写一个称为的函数randPoint()
,该函数在圆中生成均匀的随机点。因此,我们必须牢记一些重要点-
输入和输出值均为浮点数。
圆心的半径和xy位置传递到类构造函数中。
圆的圆周上的点被认为是在圆中。
randPoint()
返回X位置和随机点的y位置,在该顺序。
因此,如果输入像[10,5,-7.5],那么它可能会生成一些随机点,例如[11.15792,-8.54781],[2.49851,-16.27854],[11.16325,-12.45479]。
为了解决这个问题,我们将遵循以下步骤-
定义一个称为的方法uniform()
。这将如下工作-
返回random_number / MAX RANDOM
通过初始化程序初始化rad,并确定中心坐标
randPoint将如下工作-
theta = 2 * Pi * uniform()
r:=的平方根 uniform()
返回像(center_x + r * radius * cos(theta),center_y + r * radius * sin(theta))的对
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } 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) { srand(time(NULL)); 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) }; } }; main(){ Solution ob(10, 5, 7); print_vector(ob.randPoint()); print_vector(ob.randPoint()); print_vector(ob.randPoint()); }
Pass 10, 5, 7 into constructor Call randPoint() three times
输出结果
[1.5441, 9.14912, ] [-1.00029, 13.9072, ] [10.2384, 6.49618, ]