Przesuwanie obiektu po ścieżce kołowej

26

Chcę przesunąć jeden obiekt (kropkę) po ścieżce kołowej. Jak zmienić współrzędne X i Y, aby to osiągnąć?

Ganapathy C.
źródło

Odpowiedzi:

54

Możesz to zrobić za pomocą prostej matematyki:

X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;

(originX, originY) to środek twojego koła. promień to jego promień. to jest to!

Działa to, ponieważ sinus i cosinus są matematycznie powiązane z okręgiem jednostki .

związek sinusa i cosinusa z okręgiem jednostkowym
Źródło zdjęcia : LucasVB (praca własna) [domena publiczna], za pośrednictwem Wikimedia Commons . (Skalowane do 70%.)

Krom Stern
źródło
Co jeśli to owal? Tj. Brak ustalonego promienia.
testuj
2
@test: Jeśli owal jest zorientowany na X lub Y, możesz pomnożyć odpowiednią pozycję osi przez dodatkowy współczynnik. Jeśli potrzebujesz więcej informacji, powinieneś zadać osobne pytanie.
Kromster mówi o wsparciu Moniki
@Anko: Nie sądzę, że animacja wyjaśnia to lepiej, ale niech tak będzie dla tych, którzy jej potrzebują. Przekształcony na CW.
Kromster mówi o wsparciu Moniki
@Kromster co z osiągnięciem tego samego wyniku w przestrzeni 3D?
Tomas
14

Możesz użyć równania parametrycznego oznaczonego przez Kroma. Aby zrozumieć, dlaczego zastosowaliśmy tę formułę, musisz zrozumieć, jakie jest równanie. To równanie pochodzi od parametrycznego równania okręgu .

Biorąc pod uwagę, że okrąg jest rysowany środkiem na początku (O), jak pokazano na poniższym schemacie okrąg

Jeśli weźmiemy punkt „p” na obwodzie koła, mający promień r.

Niech kąt wykonany przez OP (początek do p) będzie równy θ. Niech odległość p od osi x będzie y Niech odległość p od osi y będzie x

Korzystając z powyższych założeń otrzymujemy trójkąt, jak pokazano poniżej: trójkąt

Teraz wiemy, że cos θ = podstawa / przeciwprostokątna i sin θ = prostopadła / przeciwprostokątna

co daje nam cos θ = x / r i sin θ = y / r

:: x = r * cos θ iy = r * sin θ

Ale jeśli okrąg nie jest na początku, a raczej w (a, b), możemy powiedzieć, że środek koła jest przesunięty

jednostki w osi x
jednostki b w osi y
Więc dla takiego okręgu możemy odpowiednio zmienić równanie parametryczne, dodając przesunięcie na osi x i y, dając nam następujące równania:

x = a + (r * cos θ)
y = b + (r * sin θ)


Gdzie a & b są współrzędnymi x, y środka koła.

W związku z tym znaleźliśmy xiy współrzędnych punktu na obwodzie koła o promieniu r

fer0x
źródło
2
Dzięki, naprawdę miła i krótka odpowiedź na ten problem, kciuki w górę
Ali.Ghodrat
5

Jest jeszcze jedna sztuczka, w której używasz formuł sin (x + a) i cos (x + a), i która pozwala ci obliczyć sin (a) i cos (a) - jest to kąt, o który chcesz się poruszać z aktualnej pozycji - tylko raz i po prostu pomnóż i uzupełnij na każdym kroku.

sin (x + a) = sin (x) * cos (a) + cos (x) * sin (a), iirc.

Oczywiście zakłada to stałą prędkość kątową.

Uważaj jednak na ograniczoną precyzję arytmetyczną. Obserwowałem w przeszłości „okrągły” ruch realizowany w ten sposób, który rysowałby spiralę w wyniku sporadycznego zaokrąglania w dół powtarzanego w czasie. Konieczne może być zresetowanie położenia do (x0, y0) po każdym obrocie.

sylvainulg
źródło