2013-03-10 72 views
5

首先讓我說我是一個絕對殘暴的數學,請耐心等待。試圖計算圓上兩點之間的角度?

我試圖計算圓上兩點之間的角度,兩點是用戶在一定時間內拖動的距離。

這是我到目前爲止有:

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); 

我不知道如何去完成它。我嘗試過使用cos A =(b^2 + c^2 - a^2)/ 2bc公式,但對我而言並不成功。我會很感激你對此的投入。如果我能讓問題更清楚,讓我知道。

+1

角之間的兩個'lines'不是兩個之間'points' – 2013-03-10 12:39:14

+0

變種V = Math.abs(Math.atan2(P1Y-wheelMiddleVer,p1x- wheelMiddleHor) - Math.atan2(p2y-wheelMiddleVer,p2x-wheelMiddleHor)); – 2013-03-10 12:39:20

+0

我編輯了我的評論有些時候,現在我認爲這是正確的 – 2013-03-10 12:41:58

回答

0

首先找到起點和終點之間的差異。

deltaY = P2_y - P1_y 
deltaX = P2_x - P1_x 

然後使用反正切

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

但這並不考慮圈子中心? – 2013-03-10 12:43:33

+0

對(0,1)和(1,0) – 2015-03-23 23:09:13

6

首先,計算角度,請記住,大部分語言都有一個反轉Y軸。含義越高 - > Y值越小。

至於你的問題,你應該使用反正切:

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

var p1 = { x:20, y:20 }不起作用。 var p2 = { x:40, y:40 }; //以弧度表示的角度 var angleRadians = Math.atan2(p2.y - p1.y,p2.x - p1.x); //以度爲單位的角度 var angleDeg = Math.atan2(p2.y - p1.y,p2.x - p1.x)* 180/Math.PI; – gnganpath 2014-04-02 06:22:14