所以我发现这个有用的网站有很多代码和解释perlin和单纯形噪声。但是,代码是用不同的语言编写的。我能够为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之间的随机数。有人能解释究竟是什么&amp;符号呢?为什么有一堆看似随机的数字呢?有没有一种简单的方法将其转换为java?
答案 0 :(得分:5)
内部部分对数字进行哈希处理,&
和/
将此哈希值转换为0到2之间的数字,因此当您执行1 - (..)
时,您会得到介于-1和1之间的数字。
获取-1和1之间的随机数的Java方法是
return Math.random() * 2 - 1;
或者如果您需要使用种子
return new Random(x).nextDouble() * 2 - 1;
答案 1 :(得分: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用于混合,&
用于屏蔽。