在C ++中生成圆中的随机点

假设我们具有圆心的半径和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, ]

以上是 在C ++中生成圆中的随机点 的全部内容, 来源链接: utcz.com/z/316848.html

回到顶部