C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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, ]

  1. ランダムな16進バイトを生成するC++プログラム

    乱数を生成できるC++プログラムについて説明します。ここでは、rand()関数とitoa()関数を使用して同じものを実装します。これらの機能について個別に、そして分類的に議論しましょう。 rand(): rand()関数は、C++の事前定義されたメソッドです。 ヘッダーファイルで宣言されています。 rand()は、範囲内の乱数を生成するために使用されます。ここで、min_nは乱数の最小範囲であり、max_nは乱数の最大範囲です。したがって、rand()は、制限値を含めて、min_nから(max_n – 1)までの乱数を返します。ここで、下限と上限をそれぞれ1と100とすると、rand()は

  2. 乱数を生成するC++プログラム

    C++を使用して乱数を生成する方法を見てみましょう。ここでは、0からある値の範囲のランダムな数値を生成しています。 (このプログラムでは、最大値は100です。) この操作を実行するために、srand()関数を使用しています。これはCライブラリにあります。関数voidsrand(unsigned int seed) 関数randで使用される乱数ジェネレーターをシードします 。 srand()の宣言は以下のようになります void srand(unsigned int seed) シードと呼ばれるパラメータを取ります。これは、疑似乱数ジェネレータアルゴリズムによってシードとして使用される整数