用逆Y轴计算2点之间的度数

ske*_*rit 26 javascript math trigonometry degrees

我正在用javascript/canvas创建一个简单的2D游戏.我需要弄清楚某个物体相对于我的位置的角度.

所以:说我在(10,10)并且物体在(10,5) - 那将导致90度(正Y向下,负Y向上)(10,10)vs(10, 15)将是270度.

我该怎么做?

ken*_*ytm 37

假设你在(a,b),对象在(c,d).然后物体与你的相对位置是(x,y)=(c - a,d - b).

然后你可以使用该Math.atan2()函数以弧度为单位获得角度.

var theta = Math.atan2(-y, x);
Run Code Online (Sandbox Code Playgroud)

请注意,结果在[-π,π]范围内.如果您需要非负数,则必须添加

if (theta < 0)
   theta += 2 * Math.PI;
Run Code Online (Sandbox Code Playgroud)

并将弧度转换为度数,乘以180 / Math.PI.


Tim*_*man 6

如果您的坐标是(xMe,yMe)并且它们的坐标是(xThem,yThem),那么您可以使用以下公式:

arctan((yMe-yThem)/(xThem-xMe))

通常它是arctan((yThem-yMe)/(xThem-xMe)),但在这种情况下,y轴的符号是相反的.

将结果从弧度转换为度数乘以180/pi.

所以在JavaScript中,这看起来像: Math.atan((yThem-yMe)/(xThem-xMe))*180/Math.PI

atan给出-pi/2和pi/2之间的值(即-90到90度之间).但是你可以查看你的(xThem - xMe,yMe - yThem)矢量所在的象限并进行相应的调整.

  • 我其实更喜欢KennyTM的答案.Math.atan2将知道你已经在哪个象限,所以你没有最后一步. (2认同)