球内の乱数
この例では、Knuth [1] の記述に従って、球内を範囲とする乱数の点を作成する方法を示します。この例の球の中心は原点で、半径は 3 です。
球内に点を作成する方法の 1 つは、球面座標で点を指定することです。その後、点を直交座標に変換してプロットすることができます。
まず、乱数発生器を初期化してこの例の結果を再現可能にします。
rng(0,'twister')
球内の各点につき仰角を計算します。これらの値は開区間 にありますが、一様分布はしていません。
rvals = 2*rand(1000,1)-1; elevation = asin(rvals);
球内の各点につき方位角を作成します。これらの値は、開区間 に一様分布しています。
azimuth = 2*pi*rand(1000,1);
球内の各点につき半径の値を作成します。これらの値は開区間 にありますが、一様分布はしていません。
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] Knuth, D. The Art of Computer Programming. Vol. 2, 3rd ed. Reading, MA: Addison-Wesley Longman, 1998, pp. 134–136.