Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tạo điểm ngẫu nhiên trong hình tròn (Generate Random Point in a Circle) trong C++

Cho bán kính R và tâm (x_c, y_c). Hàm randPoint() sinh điểm ngẫu nhiên đều trong hình tròn (bao gồm đường tròn).

Thuật toán (Extreme tọa độ cực)

  1. Sinh góc theta = 2π * random().
  2. Sinh bán kính r = sqrt(random()) (để phân bố đều theo diện tích).
  3. Tọa độ: x = x_c + r*R*cos(theta), y = y_c + r*R*sin(theta).

Mã nguồn C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
    const double PI = 3.14159265358979323846;
    double R, xc, yc;
    double uniform() { return (double)rand() / RAND_MAX; }
public:
    Solution(double radius, double x_center, double y_center) 
        : R(radius), xc(x_center), yc(y_center) { srand(time(NULL)); }
    vector randPoint() {
        double theta = 2 * PI * uniform();
        double r = sqrt(uniform());
        return {xc + r * R * cos(theta), yc + r * R * sin(theta)};
    }
};

int main() {
    Solution ob(10, 5, 7);
    for (int i=0; i<3; i++) {
        auto p = ob.randPoint();
        cout << "[" << p[0] << ", " << p[1] << "]" << endl;
    }
    return 0;
}

Đầu ra mẫu

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