2012-06-03 94 views
11

我試圖以xy(2D)座標的形式生成螺旋星系 - 但數學不是我的強項。通過公式描述螺旋來產生XY座標

我已經收集從上螺旋一個excellent source以下:

半徑r(t)和角t爲用於 simpliest螺旋,阿基米德螺線成比例的。因此,公式爲:

(3)極座標方程:r(t)= at [a是常數]。
從這如下
(2)參數的形式:X(t)=在cos(T),Y(T)=在SIN(t)的,
(1)中環 方程:X 2 + Y 2 =A²[ arc tan(y/x)] 2。

This question排序上眼星系產生,但反應是分散的,仍然是我所需要的(又名,我的數學啞的頭腦無法理解它們)過於複雜。

本質上,我需要做的是循環PHP〜5000次的螺旋公式,以在513x513 XY網格上生成點。網格的大小和所需點數可能會在未來發生變化。更好的辦法是將這些點權衡到螺旋的起源,頻率和偏離精確數學公式的距離,類似於星系的實際外觀。

這篇數學論文談到了a formula that describes the structure of spiral galaxies

完全失去我的是如何將一個數學公式轉換成我可以在PHP中循環的東西!

回答

6
// a is 5 here 
function x($t){ return 5 * $t * cos($t); } 
function y($t){ return 5 * $t * sin($t); } 

for ($t = 0; $t < 50; $t += 0.01) { 
    $xyPoint = array(x($t), y($t)); 
    // draw it 
} 

當遇到參數方程這樣的,它的普通的參數變量是t,這意味着時間。所以你可以考慮在函數中插入t的增加值,並且隨着時間的推移獲得逐漸變化的座標。

您需要爲a選擇自己的值,t的範圍和t的增量步長。這取決於你的要求。如果這可以幫助你根據你的畫布尺寸找出適合的a和t的值,那麼cos()和sin()的最大值都爲1

+0

感謝您的幫助,Chris。這恰好回答了我關於循環參數方程的問題。我的下一個任務是調整公式來堅持離散網格,我不知道這是可能的。 – Nick

+0

假設你的螺旋居中,x(t)的最大值不能超過網格寬度的一半。所以,'a'的值需要<='gridWidth /(upperBoundOf $ t * 2)'。您爲t選擇的範圍表示您繪製了多少個螺旋線。例如,如果t從0變爲2PI,則形成一個循環。 0到50幾乎是8個循環。這就是爲什麼t必須作爲一個變量留下來,只有你可以選擇一個合適的值(沒有人,但你知道你想要多少個循環)。 for循環的步長由'rangeOf $ t/numDesiredPointsToDraw'決定 – goat