用于噪声的伪随机数发生器

时间:2009-08-12 00:50:49

标签: random lua

我正在尝试使用Lua制作http://freespace.virgin.net/hugo.elias/models/m_perlin.htm中描述的Perlin噪声算法。但是,它不能正常工作,因为Lua不支持按位运算符,这对于该页面上的伪随机数函数是必需的。我尝试使用randomseed(),但我能想出的所有内容都只是制作了奇怪的模式。我需要一个伪随机数生成器,当给定参数x,y和随机种子时,它将生成介于-1和1之间的数字。伪代码很好。

谢谢!

3 个答案:

答案 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中找到了这些:

  • LuaBit是一个完全用Lua编写的按位操作lib。支持的按位运算是:not,and,或xor,right shift和left shift。几个实用程序:十六进制到十进制,utf8到usc2和诺基亚.nfb到txt。
  • BitUtils是完全在Lua中实现的按位操作。
  • Module Compress Deflate包含 bit.numberlua ,它将纯Lua中的按位操作实现为数字。