如何在JavaScript中获取两个点之间的角度

3

image

上图中我需要两点之间的角度。

如果将绿点视为原点(px,py),即(0,0),红点为(ax,ay),

顺便说一下,上图中的角度应该约为45度……锐角。

更多实例:

3点钟是0度

12点钟是90度

9点钟是180度

6点钟是270度

以下是我目前尝试的代码:

function angle(cx, cy, ex, ey) {
var dy = ey - cy;
var dx = ex - cx;
var theta = Math.atan2(dy, dx); // range (-PI, PI]
theta *= 180 / Math.PI; // rads to degs, range (-180, 180]
if (theta < 0) theta = 360 + theta; // range [0, 360)
return theta;
}

1
问题是什么?代码似乎可以工作。 - Roman Hocke
这段代码是否给我提供了错误的角度?图像的角度大约为45度,但它显示了200度左右(该值可能不正确,因为我不是完全记得)。请做一些调整,以便我可以将3点钟设置为0度,9点钟设置为180度。 - user10633681
2
你的函数在3:00时给出0°,在12:00时给出90°,在9:00时给出180°,在6:00时给出270°。据我所知,这正是你要求的。那么,再次问一下,问题是什么? - MTCoster
请告诉我们您所进行的确切调用,期望的结果是什么以及实际结果是什么。 - Roman Hocke
1
顺便说一句,也许您只是在调用中反转了点,因为如果A->B是45度,那么B->A就是225度。 - Roman Hocke
2个回答

3

我试过这个方法,对我来说工作得很好。

function angle(cx, cy, ex, ey) {
  var dy = ey - cy;
  var dx = ex - cx;
  var theta = Math.atan2(dy, dx); // range (-PI, PI]
  theta *= 180 / Math.PI; // rads to degs, range (-180, 180]
  //if (theta < 0) theta = 360 + theta; // range [0, 360)
  return theta;
}

找到了很多错误的答案。然而,您的解决方案,在取消注释第5行的情况下,正如我所预期的那样工作。 - Felipe Chernicharo

0

这应该可以工作:

function CalcAngle(px, py, ax, ay)
{
    return Math.atan((ax-px)/(ay-py));
}

或者如果起点始终为0,则这应该有效:

function CalcAngle(ax, ay)
{
    return Math.atan(ax/ay);
}

我不确定你的是否有效,但如果你想尝试,这个应该可以。


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