2013-03-10 13 views
5

Po pierwsze i przede wszystkim pozwól mi powiedzieć, że jestem absolutnie okropny z matematyki, proszę, znieść mnie.Próba obliczenia kąta między dwoma punktami na okręgu?

Próbuję obliczyć kąt między dwoma punktami na okręgu, a dwa punkty to odległość, którą użytkownik przeciągnął w określonym czasie.

To, co mam tak daleko:

intervalId = setInterval(function(){ 

     if(p1x != undefined){ 
     p2x = Xpos; 

     } 

     if(p1y != undefined){ 
     p2y = Ypos; 
     } 


     if(p1x != p2x || p1y != p2y){ 

     p1a = p1x - wheelMiddleVer; 
     p1b = p1y - wheelMiddleHor; 
     a = Math.sqrt((p1a * p1a) + (p1b * p1b)); 

     p2a = p2x - wheelMiddleVer; 
     p2b = p2y - wheelMiddleHor; 
     b = Math.sqrt((p2a * p2a) + (p2b * p2b)); 

     u = p1x - p2x; 
     v = p1y - p2y; 
     c = Math.sqrt((u * u) + (v * v)); 


     } 

     p1x = Xpos; 
     p1y = Ypos; 


    }, 1000); 

Nie jestem pewien, jak go zakończyć. Próbowałem użyć formuły cos A = (b^2 + c^2 - a^2)/2bc, ale nie wyszło mi to na dobre. Będę wdzięczny za twój wkład w tej sprawie. Jeśli mogę zadać jaśniejsze pytanie, daj mi znać.

+1

kąt pomiędzy dwoma 'lines' nie między dwoma' points' –

+0

var v = Math.abs (Math.atan2 (p1y-wheelMiddleVer, p1x- wheelMiddleHor) - Math.atan2 (p2y-wheelMiddleVer, p2x-wheelMiddleHor)); –

+0

Edytowałem mój komentarz kilka razy, teraz myślę, że jest poprawny –

Odpowiedz

0

Najpierw znajdź różnicę między punktem początkowym i końcowym.

deltaY = P2_y - P1_y 
deltaX = P2_x - P1_x 

Następnie obliczyć kąt używając arctan

angleInDegrees = atan2(deltaY ,deltaX) * 180/PI 
+0

Ale to nie bierze pod uwagę centrum koła? –

+0

nie działa dla (0,1) i (1,0) –

6

Przede wszystkim należy pamiętać, że większość języków posiada oś Y inwertowanego. Oznacza to, że im wyższy punkt na skali -> tym mniejsza jest wartość Y.

Co do Twojego pytania, należy użyć arctan:

var angle = Math.atan((p1y - p2y)/(p2x - p1x)) * (180/Math.PI); 
+0

var p1 = { x: 20, y: 20 }; var p2 = { x: 40, y: 40 }; // kąt w radianach var angleRadians = Math.atan2 (p2.y - p1.y, p2.x - p1.x); // kąt w stopniach var angleDeg = Math.atan2 (p2.y - p1.y, p2.x - p1.x) * 180/Math.PI; – gnganpath

Powiązane problemy