【问题标题】:Trying to calculate the angle between two points on a circle?试图计算圆上两点之间的角度?
【发布时间】:2014-07-30 23:49:59
【问题描述】:

首先,让我说我在数学上绝对是个糟糕透顶的人,请多多包涵。

我正在尝试计算圆上两点之间的角度,这两点是用户在一定时间内拖动的距离。

这是我目前所拥有的:

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 公式,但对我来说并不奏效。我将感谢您对此的意见。如果我能让问题更清楚,请告诉我。

【问题讨论】:

  • 两个lines之间的角度不是两个points之间的角度
  • var v = Math.abs(Math.atan2(p1y-wheelMiddleVer, p1x-wheelMiddleHor) - Math.atan2(p2y-wheelMiddleVer, p2x-wheelMiddleHor));
  • 我修改了我的评论,现在我认为它是正确的
  • 很抱歉,我不确定如何实施您的回复。它究竟返回了什么?

标签: javascript jquery math geometry


【解决方案1】:

首先,请记住,大多数语言都有反转 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;
【解决方案2】:

先找到起点和终点的差。

deltaY = P2_y - P1_y 
deltaX = P2_x - P1_x

然后用 arctan 计算角度

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

【讨论】:

  • 但这不考虑圆心?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多