2013-03-10 73 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