1

我正在开发一个基于种子整数和其他两个整数的 Perlin 噪声生成器: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 回答