我正在尝试使用Lua制作http://freespace.virgin.net/hugo.elias/models/m_perlin.htm中描述的Perlin噪声算法。但是,它不能正常工作,因为Lua不支持按位运算符,这对于该页面上的伪随机数函数是必需的。我尝试使用randomseed(),但我能想出的所有内容都只是制作了奇怪的模式。我需要一个伪随机数生成器,当给定参数x,y和随机种子时,它将生成介于-1和1之间的数字。伪代码很好。
谢谢!
答案 0 :(得分:5)
已经为此制作了lua库,我找到的是: lrandom
它使用Mersenne Twister算法,可以更好地满足您的需求。
答案 1 :(得分:1)
在Lua中很容易制作线性同余随机数发生器。一个简单的是Park-Miller
function pmrng (x) return math.fmod(x * 16807, 2147483647) end
这将为您提供种子x
之后的下一个随机整数[1..2147483646]。使用此整数通过除以模数得到浮点数,在这种情况下为2147483647。
prng_seed = 13579
function upmrng () prng_seed = pmrng(prng_seed); return prng_seed / 2147483647 end
将此比例缩放为-1 .. + 1
upmrng() * 2 - 1
答案 2 :(得分:0)
我不知道伪随机数问题的任何纯Lua解决方案,但您可以尝试使用一些纯Lua位库编写您提到的算法。
我在Wiki中找到了这些: