生成 C++ 中圓中的隨機點
假設我們知道圓心半徑和 x-y 位置,我們需要編寫一個名為 randPoint() 的函式,該函式可在圓中生成均勻的隨機點。因此,有一些重要事項需要牢記 −
- 輸入和輸出值是浮點數。
- 圓心的半徑和 x-y 位置傳遞給類建構函式。
- 圓周上的點被認為在圓中。
- randPoint() 以該順序返回隨機點的 x 位置和 y 位置。
因此,如果輸入類似於 [10, 5,-7.5],則它可能會生成一些隨機點,例如 [11.15792,-8.54781],[2.49851,-16.27854],[11.16325,-12.45479]。
要解決此問題,我們將執行以下步驟 −
- 定義一個名為 uniform() 的方法。其工作方式如下 −
- return 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, ]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP