球面一様分布サンプリング; Surface Spherical Uniform Distribution Sampling
概要
球面一様分布とは以下の式で表現される確率分布。単位球領域面に一様に分布する3変量確率変数を表現する。
$$ f(\boldsymbol{v}) = \frac{1}{4 \pi}, \quad |\boldsymbol{v}| = 1 $$
ソースコード
namespace ExRandom.MultiVariate {
public class SurfaceSphericalRandom : Random<double>{
readonly MT19937 mt;
public SurfaceSphericalRandom(MT19937 mt) {
if(mt == null) {
throw new ArgumentNullException();
}
this.mt = mt;
}
public override Vector<double> Next() {
double theta, phi, s;
theta = mt.NextDouble() * 2 - 1;
s = Math.Sqrt(1 - theta * theta);
phi = 2 * Math.PI * mt.NextDouble_OpenInterval1();
return new Vector<double>(s * Math.Cos(phi), s * Math.Sin(phi), theta);
}
}
}
関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス