我正在开发一个Perlin Noise生成器,它基于一个种子整数和另外两个整数: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价值观,模式变得模糊,根本看不到有机。 有没有办法改变我的公式(或者可能是一个全新的公式),以满足我的需求?
答案 0 :(得分: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;
}
您可以轻松地将种子添加到其中。