我正在用javascript / canvas创建一个简单的2D游戏。 我需要弄清楚某个物体相对于我位置的角度。
所以:说我在(10,10)并且物体在(10,5) - 那将导致90度(正Y向下,负Y向上) (10,10)vs(10,15)将是270度。
我该怎么做?
答案 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
你将得到[-π,π]范围内的结果。
我不知道他们为什么没有将画布原点设在左下角。