1

シード整数と他の 2 つの整数 x と y に基づいて動作するパーリン ノイズ ジェネレーターを開発しています。

ここまでで、疑似乱数ジェネレーターは次のようになります。

private float noise(int x, int y) {     

    int n = x + y * seed;
    return (1.0f - ((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824f);

}

しかし、この実装にはいくつかの問題があります。まず、戻り間隔が一定ではなく (理想的には、[-1, 1] または [0, 1] で作業したい)、負の x および y 値の場合、パターンがブロック状になり、有機的に見えなくなります。私のニーズに合うように私の式(またはまったく新しいもの)を変更する方法はありますか?

4

1 に答える 1

1

私はこれを使用します(ネットで見つけましたが、元のリンクはもうありません):

private double noise(int x, int y) {
    int n=(int)x*331+(int)y*337; // add your seed on this line.
    n=(n<<13)^n;
    int nn=(n*(n*n*41333 +53307781)+1376312589)&0x7fffffff;       
    return ((1.0-((double)nn/1073741824.0))+1)/2.0;

}

シードを簡単に追加できます。

于 2013-03-12T15:48:47.577 に答える