我試圖使用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