-2

所以我找到了这个有用的网站,里面有很多关于 perlin 和 simplex 噪声的代码和解释。但是,代码是用不同的语言编写的。我能够为java重写大部分内容,但是有一个函数1.我不明白,2.我不知道如何用java编写它。代码是:

function IntNoise(32-bit integer: x)             

    x = (x<<13) ^ x;
    return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);    

  end IntNoise function

同样,我不知道它是用什么语言编写的。但是,作者指出该函数返回一个介于 -1 和 1 之间的随机数。有人能解释一下 & 符号的作用吗?为什么会有一堆看似随机的数字?有没有一种简单的方法可以将它转换为java?

4

2 回答 2

6

内部部分对数字进行哈希处理,&然后/将此哈希转换为 0 到 2 之间的数字,所以当你这样做时,你1 - (..)会得到一个介于 -1 和 1 之间的数字。

一种获取 -1 和 1 之间随机数的 Java 方法是

return Math.random() * 2 - 1;

或者如果您需要使用种子

return new Random(x).nextDouble() * 2 - 1;
于 2015-02-23T21:08:57.177 回答
1

这种语言似乎有非常相似的运算符,但声明不同。唯一重要的是让 Java 将这些位解释为 IEEE-754 浮点数。以下应该足够了:

float rNoise(int x){
x = (x<<13) ^ x;
return ( 1.0 - Float.floatToIntBits( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0); 
}

运算符将&独立地对数字的每个位执行位级 AND 运算,同时^以类似的方式执行 XOR 运算。看起来 XOR 用于混合,而&用于掩蔽。

于 2015-02-23T21:09:24.980 回答