倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Java で球面上・球体内の一様分布を生成する (3):単位球体内の一様分布

今回は「単位球体内の一様分布」を生成するメソッド 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){
        ...
    }
    ...
}

おわり。