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!
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
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