Uzyskaj kąt w radianach z danym punktem na okręgu


14

Pracuję nad tarczą, która obraca się wokół koła.

przed kliknięciem

To pokrętło powinno umożliwiać ruch myszką w dowolnym miejscu koła, aby dopasować położenie pokrętła do punktu na okręgu pod tym samym kątem co kliknięcie. Na przykład z powyższej tarczy, jeśli klikniesz miejsce pokazane na różowo poniżej, przesunęłem tarczę nad ten punkt, ale na kółko.

po kliknięciu (różowy)

Wiem, jak uzyskać pozycję punktu na okręgu, biorąc pod uwagę promień i kąt (w radianach). Oto ta formuła :

x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;

Jednak chcę zrobić coś wręcz przeciwnego - mam punkt kliknięcia, który chcę zmienić w punkt na kole (tam, gdzie idzie gałka kontrolna). Próbuję użyć tego punktu (i danego promienia), aby obliczyć kąt w radianach, aby móc ustawić pokrętło sterujące na okręgu pod tym samym kątem.

Czy istnieje przydatna formuła, której mogę użyć, aby to osiągnąć?


Czy szukasz wzoru pozwalającego uzyskać kąt między punktami?
William Mariager

Czy potrafisz uzyskać kąt między dwoma punktami? Potrafię obliczyć nachylenie, ale zgaduję, że potrzebuję trzeciego punktu, aby utworzyć trójkąt i użyć odwrotnej funkcji trygonomicznej, aby rozwiązać ten problem.
redaktor

Wysłałem odpowiedź pokazującą, jak to zrobić.
William Mariager,

3
To, co naprawdę masz tutaj, to kąt między dwoma wektorami . Oba pochodzą ze środka koła i mają tę samą wielkość (promień koła).
MichaelHouse

Oto matematyka: odwrotne funkcje trygonometryczne . atanjest skrótem od arctani atan2jest tylko funkcją, która akceptuje poszczególne argumenty i dokonuje podziału za ciebie.
voithos

Odpowiedzi:


25

Sprawdź atan2 .

Daje ci kąt pomiędzy (0, 0) a (x, y), x i yjest argumentem funkcji.

Edit: jeśli środek okręgu nie jest (0, 0), bez względu na to, po prostu to zrobić: atan2(y - cy, x - cx).


Czy to ma znaczenie, jeśli środek mojego koła nie znajduje się w (0,0)? Zgaduję, że właśnie przesunąłem argumenty, atan2jak pokazano poniżej przez @Luis?
redaktor

Po prostu przetłumacz, odejmując. Zobacz edycję.
jcora,

3
-1: Pierwszy parametr dla atan2 toy
Luis Estrada

2
Dzięki @LuisEstrada, właśnie to poprawiłem. (Mam nadzieję, że zrobisz to +1. :))
jcora,

+ Luis Estrada Przepraszam, że nnecro-bump to, ale musiałem ci podziękować. Próbuję debugować mój program od półtora dnia. Okazuje się, że argumenty atan2były zacofane!
Carcigenicate

8

Potrzebny jest środek gałki i punkt kursora wraz z funkcją atan2 . Następnie użyj go w następujący sposób:

 angle = atan2(mouseY - knobCenterY, mouseX - knobCenterX)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.