Computer >> Máy Tính >  >> Lập trình >> C ++

Tạo điểm ngẫu nhiên trong một vòng tròn trong C ++

Giả sử chúng ta có bán kính và vị trí x-y của tâm một vòng tròn, chúng ta phải viết một hàm gọi là randPoint () để tạo ra một điểm ngẫu nhiên đồng nhất trong vòng tròn. Vì vậy, sẽ có một số điểm quan trọng mà chúng ta phải ghi nhớ -

  • Giá trị đầu vào và đầu ra ở dạng dấu phẩy động.
  • Bán kính và vị trí x-y của tâm hình tròn được chuyển vào hàm tạo lớp.
  • Một điểm trên chu vi của hình tròn được coi là nằm trong hình tròn.
  • Hàm randPoint () trả về vị trí x và vị trí y của điểm ngẫu nhiên, theo thứ tự đó.

Vì vậy, nếu đầu vào giống như [10, 5, -7,5], thì nó có thể tạo ra một số điểm ngẫu nhiên như [11.15792, -8.54781], [2.49851, -16.27854], [11.16325, -12.45479].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Định nghĩa một phương thức được gọi là đồng nhất (). Điều này sẽ hoạt động như sau -
  • trả về random_number / MAX RANDOM
  • Thông qua trình khởi tạo, hãy khởi tạo tọa độ rad và tâm
  • RandPoint sẽ hoạt động như sau -
  • theta =2 * Pi * đồng phục ()
  • r:=căn bậc hai của same ()
  • trả về một cặp như (center_x + r * radius * cos (theta), center_y + r * radius * sin (theta))

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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());
}

Đầu vào

Pass 10, 5, 7 into constructor
Call randPoint() three times

Đầu ra

[1.5441, 9.14912, ]
[-1.00029, 13.9072, ]
[10.2384, 6.49618, ]