2012-01-23 10 views
12

Jeśli mam obrazu 720, 720, która wygląda tak ..Znajdź kąt punktu od środka okręgu

enter image description here

Jak wypracować kąt poruszanych X, Y, zważywszy, że centrum x i y to 360, 360 Wiele obliczeń widzę dla tego założenia, że ​​pochodzenie wynosi 0,0 (które jest u góry po lewej), więc otrzymuję niepoprawne wyniki. Zakładam, że 0 jest zawsze na górze i nie jest obrócone.

+0

Co dokładnie znalazłaś tak daleko? Jeśli problem dotyczy tylko współrzędnych ośrodka, chętnie Ci pomożemy! –

+1

Tradycyjnie 0 stopni jest po prawej stronie, 90 jest w górze, 180 w lewo, a 270 w dół. (Mogę źle zrozumieć twoje zdanie.) –

Odpowiedz

10

może być wyraźniejszy w ten sposób:

(Math.toDegrees(Math.atan2(fromLeft - 360.0, 360.0 - fromTop)) + 360.0) % 360.0 

Dodawanie stopni obrót 360 i stosując operator modulo daje dodatni kąt, który atan2 nie.

+0

To wydaje się być najbliższe każdemu rozwiązaniu sugerowanemu tutaj. Źle zrozumiałem w moim poprzednim komentarzu, jeśli podstawię współrzędną x touch dla FromLeft i y dla fromTop, otrzymam co najmniej dodatni kąt. Kliknięcie na około 3 godzinie daje około 90 stopni zgodnie z oczekiwaniami , ale jeśli kliknę na 6 godzinie, zbliżam się do 360 stopni, co nie było oczekiwane, godzina 9 wskazuje prawidłowe 270 stopni. Wygląda na to, że jest całkiem blisko, ale nadal jest jakiś problem z 12 i 6 godziną w tym obliczeniu. – Kyros

+0

Jeśli kliknę na 12 godzinie, dostanę 180 i szóstą otrzymam 0, więc są one w jakiś sposób odwrócone. – Kyros

+0

Poprawiono z "fromTop - 360.0" do "360.0 - fromTop". Testowane w JavaWIDE. – minopret

0
java.lang.Math.atan2(y-360,x-360); 
0

Współrzędne ekranu nie idą w kierunku tych trygonometrycznych.

użycie java.lang.Math.atan2(-(y-360),x-360);

14

Oto wzór ogólny:

angle = atan2(mouseY - cirleCenterY, mouseX - circleCenterX); 
+4

Nie powinno to być '' 'angle = atan2 (mouseY - circleCenterY, mouseX - circleCenterX);' '' –

Powiązane problemy