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

我正在尝试使用 Lua 实现 http://freespace.virgin.net/hugo.elias/models/m_perlin.htm 中描述的 Perlin 噪声算法。然而,Lua 不支持位运算符,而这些运算符对于该页面上的伪随机数函数是必需的。我尝试过使用 randomseed(),但是我能想到的所有操作都只会产生非常奇怪的图案。我需要一个伪随机数生成器,当给定参数 x、y 和随机种子时,它将生成介于-1和1之间的数字。伪代码可以。谢谢!

原文链接 https://stackoverflow.com/questions/1263731

点赞
stackoverflow用户146082
stackoverflow用户146082

有一些为此而制作的 Lua 库,我发现其中一个是: lrandom

它使用了梅森旋转算法,可能更适合您的需求。

2009-08-12 01:02:21
stackoverflow用户44740
stackoverflow用户44740

我不知道有没有纯 Lua 解决伪随机数问题的方法,但你可以尝试使用一些纯 Lua 位操作库来编写你提到的算法。

我在 Wiki 上找到了这些:

  • LuaBit 是一个完全由 Lua 编写的位操作库。支持的位操作有:not、and、or、xor、右移和左移。还包括一些实用工具:十六进制转十进制、utf8 转 usc2 和 nokia .nfb 转 txt。
  • BitUtils 是完全由 Lua 实现的位操作库。
  • Module Compress Deflate 包括 _bit.numberlua_,它使用纯 Lua 作为数字实现位操作。
2009-08-13 20:58:00
stackoverflow用户33252
stackoverflow用户33252

在 Lua 中制作线性同余伪随机数生成器非常容易。一个简单的例子是帕克-米勒

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
2009-08-14 13:09:18