2015-07-28 106 views
6

我想把一個圖像上的隨機點(一些有趣的小項目的空間中的星星)爲什麼rand()不是真的隨機?

我有這個簡單的腳本。

<?php 
$gd = imagecreatetruecolor(1000, 1000); 
$white = imagecolorallocate($gd, 255, 255, 255); 

for ($i = 0; $i < 100000; $i++) 
{ 
    $x = rand(1,1000); 
    $y = rand(1,1000); 

    imagesetpixel($gd, round($x),round($y), $white); 
} 

header('Content-Type: image/png'); 
imagepng($gd); 
?> 

請記住,這僅僅是測試,這就是爲什麼我把100000 for循環,這樣就說明我注意到新興模式。我們有100萬像素使用,仍然隨機X和Y創建這種模式,而不是: enter image description here

所以它是遠離隨機。我知道rand並不是真正的隨機數,這就是爲什麼它對密碼學不好。但我找不到有關它是如何工作的信息,以及我應該如何避免這種模式。

回答

8

線性同餘隨機數生成器(這是PHP rand使用的)將始終在x-y圖上顯示自相關效果。

您將有更好的結果mt_rand。這是一個Mersenne Twister發生器。

+1

感謝您使用我搜索的關鍵字。真的有幫助。我對PHP和編程有了大量了解,但我主要是自學成才,所以缺乏一些技術術語。我會盡快接受。 –

+0

而且mt_rand真的可以勝任。這似乎是隨機的,每次運行時都會改變。 http://i.imgur.com/DoeNFB9.png再次感謝您。 –