2012-06-03 12 views
11

Próbuję wygenerować galaktykę spiralną w postaci współrzędnych xy (2D) - ale matematyka nie jest moją mocną stroną.Pętla poprzez formułę opisującą spiralę do generowania współrzędnych XY

ja zbierana następujące z excellent source w spirale:

założonego promienia r (t) i kąta T, są proporcjonalne do najprostszy spirali, spirali Archimedesa. Dlatego równanie to:

(3) Równanie biegunowe: r (t) = przy [a jest stałe].
Z tego wynika
(2) tworzą parametrów: x (t) = co cos (t), y (t) = co sin (t),
(1) Środek równanie: x² + y² = a² [ arc tan (y/x)] ².

This question jakby dotknął galaktyki generacji, ale odpowiedzi były rozproszone i wciąż zbyt skomplikowane dla co potrzebne (aka, mój umysł matematyka-niemy nie może ich zrozumieć).

Zasadniczo potrzebuję pętli przez formułę spirali w PHP ~ 5000 razy, aby wygenerować punkty na siatce 513x513 XY. Rozmiar siatki i liczba potrzebnych punktów mogą ulec zmianie w przyszłości. Jeszcze lepiej byłoby zważyć te punkty w kierunku pochodzenia spiral, zarówno pod względem częstotliwości, jak i od tego, jak daleko odbiegają od dokładnej formuły matematycznej, podobnie jak faktycznie wygląda galaktyka.

Ten papier matematyczny mówi o a formula that describes the structure of spiral galaxies.

To, co kompletnie mnie gubi, to jak przetłumaczyć formułę matematyczną na coś, do czego mogę przejść w PHP!

Odpowiedz

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 
} 

gdy napotkasz równań parametrycznych, jak to jej wspólne dla zmiennej parametru do t, co oznacza czas. Można więc pomyśleć o podłączeniu zwiększających się wartości t do funkcji i otrzymaniu współrzędnych, które stopniowo zmieniają się wraz z upływem czasu.

musisz wybrać własne wartości dla a, zakresu t i przyrostu kroku wielkości t. To zależy od twoich wymagań. zarówno cos(), jak i sin() mają maksymalną wartość 1, jeśli pomaga to ustalić odpowiednie wartości a i t w zależności od rozmiaru płótna.

+0

Dzięki za pomoc, Chris. To dokładnie odpowiedział na moje pytanie w odniesieniu do pętli przez parametryczne równanie. Moim następnym zadaniem jest zmodyfikowanie formuły tak, aby przylegała do dyskretnej siatki, której nie jestem pewien. – Nick

+0

Maksymalna wartość x (t) nie może przekroczyć połowy szerokości siatki, zakładając, że centrujesz swoją spiralę. Tak więc wartość 'a' musi wynosić <=' gridWidth/(upperBoundOf $ t * 2) '. Wybrany zakres dyktuje liczbę rysowanych spiral. Na przykład, jeśli t idzie od 0 do 2PI, tworzysz jedną pętlę. 0 do 50 to prawie 8 pętli. Dlatego t należy pozostawić jako zmienną, a tylko Ty możesz wybrać odpowiednią wartość (nikt nie wie, ile pętli chcesz). Wielkość kroku pętli for jest określana przez 'rangeOf $ t/numDesiredPointsToDraw' – goat

Powiązane problemy