2013-05-06 56 views
4

昨天剛剛瞭解了Logo。出生在九十年代我從來沒有遇到過它。於是我開始使用約書亞貝爾寫的在線Logo Interpreter,我決定編寫一個circle函數來製作同心圓。這是我寫的:生成星空的算法

cs 

to circle 
penup forward :radius right 90 
pendown repeat 360 [forward 3.14 * :radius/180 right 1] 
penup left 90 back :radius pendown 
end 

make "radius 30 

repeat 160 [circle make "radius :radius + 30] 

有趣的是繪圖畫布是一個環形陣列。因此這些圈子最終重疊。通過繪製160個同心圓與30的倍數增加半徑我最終得到的圖像是這樣的:

Logo starfield generated by 160 concentric circles with increasing radii in multiples of 30.

這確實是驚人的。乍一看,它看起來像是一張真實的夜空圖片,它讓我想到了 - 是否有一個通用算法來繪製一個星空?

順便說一句,如果你仔細看,你可以看到一個網格30 x 30像素正方形。邊界是黑色的,所以有點難以注意。

+2

我沒有「做」標誌,我不知道用於生成星空的一般算法,但如果我要「自己動手」,我只需要直接解決方案,即生成一個隨機x,一個隨機y並將其設置爲一個星的位置。我會一直這樣做,直到我達到一些哨點值並退出。我之前做過,而且我通常會得到合理的結果(即它看起來像一個「真實」的星空)。 – Frecklefoot 2013-05-06 18:33:26

+2

這**確實令人驚訝。謝謝!你有沒有想過自己? – likeitlikeit 2013-05-14 00:14:35

+2

@likeitlikeit - 我只是在一個環形陣列上繪製同心圓。結果看起來像一個星空。 =) – 2013-05-14 14:30:01

回答

5

作爲矮人要塞的狂熱玩家,我會選擇一個分形公式來生成星星。在我看來,電腦隨機性還不夠好。再次借用DF遊戲,我會添加各種步驟來增強星空,例如隨機化形狀,顏色,大小,發光,聚類(故意將一羣恆星聚集在一起)。

如果你想與現實主義,也模擬氣體背景。空間不是純黑色背景上的白點。

最後,我建議您獲取一些空間圖像(來自我們的老朋友哈勃望遠鏡)並儘可能忠實地複製它。然後玩參數來達到你的喜好(也許你想製作一款遊戲)。

P.S:我沒有指定任何編碼語言,因爲我相信它不是一個關於代碼(它非常基本)的問題,而是一個設計問題。你在Flash/Actionscript中比Java更容易做到這一點,請相信我。

6

正常的方式做一個星空是隨機在x/y平面選擇點,在僞代碼是這樣的:

fill image with black 
for (however many stars you want) 
    x = random() * width 
    y = random() * height 
    plot star at position x,y 
loop 

如果你想獲得幻想,你可以繪製隨機亮度的恆星以及。另外請記住,星星會稍微閃爍,所以如果您正在進行動畫製作,那麼每幀的亮度會有所不同,這會讓它們看起來更加逼真。