ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

球内の乱数

この例では、Knuth [1] の記述に従って、球体内を範囲とする乱数の点を作成する方法を示します。この例の球の中心は原点で、半径は 3 です。

球内の点を作成する 1 つの方法は、点を球面座標で指定することです。次に、球面座標を直交座標に変換して点をプロットできます。

まず、乱数発生器を初期化してこの例の結果を再現可能にします。

rng(0,'twister');

球内の各点の仰角を計算します。これらの値は開区間 (–π/2, π/2) 内にありますが、一様分布はしていません。

rvals = 2*rand(1000,1)-1;
elevation = asin(rvals);

球内の各点の方位角を求めます。これらの値は、開区間 (0, 2π) 上に一様分布しています。

azimuth = 2*pi*rand(1000,1);

球内の各点の動径の値を求めます。これらの値は開区間 (0, 3) 内にありますが、一様分布はしていません。

radii = 3*(rand(1000,1).^(1/3));

直交座標に変換して結果をプロットします。

[x,y,z] = sph2cart(azimuth,elevation,radii);
figure
plot3(x,y,z,'.');
axis equal

乱数を球 "表面" に配置する場合は、sph2cart の最後の入力引数に定数の動径を指定します。この例では、値は 3 です。

[x,y,z] = sph2cart(azimuth,elevation,3);

参照

[1] Kunth, D. The Art of Computer Programming. Vol. 2, 3rd ed. Reading, MA: Addison-Wesley Longman, 1998, pp. 134–136.

この情報は役に立ちましたか?