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
- イニシャライザを使用して、半径と中心座標を初期化します
- 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, ]
-
ランダムな16進バイトを生成するC++プログラム
乱数を生成できるC++プログラムについて説明します。ここでは、rand()関数とitoa()関数を使用して同じものを実装します。これらの機能について個別に、そして分類的に議論しましょう。 rand(): rand()関数は、C++の事前定義されたメソッドです。 ヘッダーファイルで宣言されています。 rand()は、範囲内の乱数を生成するために使用されます。ここで、min_nは乱数の最小範囲であり、max_nは乱数の最大範囲です。したがって、rand()は、制限値を含めて、min_nから(max_n – 1)までの乱数を返します。ここで、下限と上限をそれぞれ1と100とすると、rand()は
-
乱数を生成するC++プログラム
C++を使用して乱数を生成する方法を見てみましょう。ここでは、0からある値の範囲のランダムな数値を生成しています。 (このプログラムでは、最大値は100です。) この操作を実行するために、srand()関数を使用しています。これはCライブラリにあります。関数voidsrand(unsigned int seed) 関数randで使用される乱数ジェネレーターをシードします 。 srand()の宣言は以下のようになります void srand(unsigned int seed) シードと呼ばれるパラメータを取ります。これは、疑似乱数ジェネレータアルゴリズムによってシードとして使用される整数