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

时间:2010-07-22 13:57:36

标签: javascript math trigonometry degrees

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

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

我该怎么做?

4 个答案:

答案 0 :(得分:37)

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

然后你可以用Math.atan2() function来获得弧度的角度。

var theta = Math.atan2(-y, x);

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

if (theta < 0)
   theta += 2 * Math.PI;

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

答案 1 :(得分: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)矢量所在的象限并进行相应的调整。

答案 2 :(得分:4)

外行人的说法:

function pointDirection(x1, y1, x2, y2) {
    return Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;
}

答案 3 :(得分:1)

在HTML5画布中,原点是左上角,因此y轴从上到下增长。因此,无论您在单位圆上的任何地方计算点A到中心(C)的角度,您实际上都应该这样做

./gradlew idea

你将得到[-π,π]范围内的结果。

我不知道他们为什么没有将画布原点设在左下角。