我试图使用Lua在上描述的Perlin噪声算法。但是,它不能正常工作,因为Lua不支持按位运算符,这对于该页面上的伪随机数函数是必需的。我试着用randomseed()搞乱,但是我能想出的所有东西都只是做出了非常奇怪的模式。我需要一个伪随机数生成器,当给定参数x,y和一个随机种子时,它会生成-1和1之间的数字。伪代码很好。噪声伪随机数发生器
谢谢!
我试图使用Lua在上描述的Perlin噪声算法。但是,它不能正常工作,因为Lua不支持按位运算符,这对于该页面上的伪随机数函数是必需的。我试着用randomseed()搞乱,但是我能想出的所有东西都只是做出了非常奇怪的模式。我需要一个伪随机数生成器,当给定参数x,y和一个随机种子时,它会生成-1和1之间的数字。伪代码很好。噪声伪随机数发生器
谢谢!
已经有这个做Lua库,一个我发现是: lrandom
它使用可满足您的需求更好地梅森倍捻机算法。
我不知道任何纯伪随机数问题的Lua解决方案,但您可以尝试使用一些纯粹的Lua位库编写您提到的算法。
我在Wiki找到了这些:
我让LuaBit工作。虽然... 函数noise1(x,y) \t n = x + y * 57 \t n = bit.blshift(n,13)^ n; (((n *(n * n * 15731 + 789221)+ 1376312589)),2147483647))/ 1073741824.0) \t返回n2; 结束 n本身已经相当大。然后它被转移到左边13。此时它是8或9位数......然后它被提升到第n次方。由此产生的数字非常大以至于变成无穷大,所以函数的最终输出总是1,除非x和y的值很低 – phpscriptcoder 2009-08-13 22:16:55
在Lua中很容易制作一个线性同余随机数发生器。一个简单的一种是Park-Miller
function pmrng (x) return math.fmod(x * 16807, 2147483647) end
这会给你的下一个随机整数[1..2147483646] x
后,种子。在这种情况下,使用此整数除以模数2147483647来制作浮点数。
prng_seed = 13579
function upmrng() prng_seed = pmrng(prng_seed); return prng_seed/2147483647 end
为了扩展这个-1 .. +1做
upmrng() * 2 - 1
我找不到链接进行。另外,这只是一个游戏脚本(侧面项目),所以我无法安装C库。 – phpscriptcoder 2009-08-13 01:03:14
链接在那里:http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/5.1/lrandom.tar.gz但如果你不能使用C库,它不会帮助你。 – lhf 2009-08-13 01:13:05