今回は「単位球体内の一様分布」を生成するメソッド setPointInBall(double) を考えます(一覧)。 これは前回実装した「単位球面上の一様分布」を生成するメソッド setPointOnSphere(double, int) を使えば簡単に実装可能。
class PolarRandomGenerator{ private double nextDouble(){...} /** * @param x n 次元球体 (n >= 2) 内において、 * 一様分布するランダムな点の n 次元座標をセットする配列 */ public void setPointInBall(double[] x){ int n = x.length; setPointOnSphere(x, n); double r = pow(nextDouble(), 1.0/n); for(int i = 0; i < n; i++) x[i] *= r; } private void setPointOnSphere(double[] x, int n){ ... } ... }
おわり。