【发布时间】:2011-10-04 23:54:33
【问题描述】:
有没有任何可能的方法可以在没有任何二元运算符的情况下生成伪随机数?由于这是一张 3D 地图,我试图将其作为 X 和 Y 的函数,但希望在它们的某处包含一个随机种子,这样每次都不会相同。我知道你可以用二元运算符制作这样的噪声函数:
double PerlinNoise::Noise(int x, int y) const
{
int n = x + y * 57;
n = (n << 13) ^ n;
int t = (n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff;
return 1.0 - double(t) * 0.931322574615478515625e-9;/// 1073741824.0);
}
但由于我使用的是 lua 而不是 C++,所以我不能使用任何二元运算符。我尝试了许多不同的东西,但没有一个有效。 帮助?
【问题讨论】:
-
当然。请改用三元运算符。但是,如果将其限制为一元... $x_{n+1} = \sin(\exp(x_n))$ 可能会产生良好的结果。
-
抱歉,我现在才进入代数 2。xn+1 是什么意思/做什么?
-
基本上我的意思是 $n^\hbox{th}$ 伪随机数是 $\sin(\exp(\hbox{ }n - 1\hbox{th 伪随机数}))$。注意$\exp(x)=e^x$。另一个好的方法是将 $n^\hbox{th}$ 伪随机数设为 $sin(exp(n))$。
-
等等...二进制是指接受 2 个值还是指异或和二进制移位之类的东西?
-
我的意思是我正在使用 lua,所以我手头没有任何二进制运算符。我也在谈论 sub n+1。比它低哪里?