尝试计算圆上两点之间的角度?

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
两条“线”之间的角度,而不是两个“点”之间的角度。 - Ahmed Nabil
变量v=Math.abs(Math.atan2(p1y-wheelMiddleVer, p1x-wheelMiddleHor) - Math.atan2(p2y-wheelMiddleVer, p2x-wheelMiddleHor)); - Anders Lindén
我编辑了几次评论,现在我认为它是正确的。 - Anders Lindén
抱歉,我不确定如何实现您的响应。它确切地返回什么? - styke
2个回答

6

首先,请记住大多数语言都有一个倒置的 Y 轴。这意味着在比例尺上点越高,其 Y 值就越小。

至于你的问题,你应该使用反正切函数(arctan):

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

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

0

首先找到起点和终点之间的差异。

deltaY = P2_y - P1_y 
deltaX = P2_x - P1_x

然后使用arctan计算角度

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

但这并没有考虑圆心的因素? - Anders Lindén

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接