生成介于 -1 和 1 之间的随机数?
Generate random number between -1 and 1?
所以我找到了这个有用的网站,其中有很多代码和对 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
同样,我不知道它是用什么语言编写的。但是,作者指出函数 returns 是一个介于 -1 和 1 之间的随机数。有人可以解释一下 & 符号的确切作用?为什么会有一堆看似随机的数字?有没有一种简单的方法可以将其转换为 java?
内部对数字进行哈希处理,&
和 /
将此哈希转换为 0 到 2 之间的数字,因此当您执行 1 - (..)
时,您会得到一个介于 -1 之间的数字和 1.
获得-1 和 1 之间的随机数的 Java 方法是
return Math.random() * 2 - 1;
或者如果您需要使用种子
return new Random(x).nextDouble() * 2 - 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 用于混合,&
用于掩码。
所以我找到了这个有用的网站,其中有很多代码和对 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
同样,我不知道它是用什么语言编写的。但是,作者指出函数 returns 是一个介于 -1 和 1 之间的随机数。有人可以解释一下 & 符号的确切作用?为什么会有一堆看似随机的数字?有没有一种简单的方法可以将其转换为 java?
内部对数字进行哈希处理,&
和 /
将此哈希转换为 0 到 2 之间的数字,因此当您执行 1 - (..)
时,您会得到一个介于 -1 之间的数字和 1.
获得-1 和 1 之间的随机数的 Java 方法是
return Math.random() * 2 - 1;
或者如果您需要使用种子
return new Random(x).nextDouble() * 2 - 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 用于混合,&
用于掩码。