使用反向 Y 轴计算 2 点之间的度数

发布于 2024-09-11 03:28:20 字数 179 浏览 6 评论 0原文

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

所以:假设我在 (10,10) 并且物体在 (10,5) - 这将导致 90 度(因为正 Y 向下,负 Y 向上) (10,10) 与 (10,15) 的夹角为 270 度。

我该怎么办呢?

I'm creating a simple 2D game in javascript/canvas.
I need to figure out the angle of a certain object relative to my position.

So: say I'm at (10,10) and the object is at (10,5) - that would result in 90 degrees (as positive Y is down, negative Y is up)
(10,10) vs (10,15) would be 270 degrees.

How would I go about this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

樱花细雨 2024-09-18 03:28:20

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

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

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

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

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

弧度相加并转换为度数,然后乘以 180 / Math.PI

Suppose you're at (a, b) and the object is at (c, d). Then the relative position of the object to you is (x, y) = (c - a, d - b).

Then you could use the Math.atan2() function to get the angle in radians.

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

note that the result is in the range [-π, π]. If you need nonnegative numbers, you have to add

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

and convert radians to degrees, multiply by 180 / Math.PI.

寄居人 2024-09-18 03:28:20

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

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

通常它' d 为 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) 向量位于哪个象限并进行相应调整。

If your coordinates are (xMe, yMe) and their coordinates are (xThem, yThem), then you can use the formula:

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

Normally it'd be arctan((yThem-yMe)/(xThem-xMe)), but in this case the sign of the y-axis is reversed.

To convert the result from radians to degrees multiply by 180/pi.

So in JavaScript, this would look like: Math.atan((yThem-yMe)/(xThem-xMe))*180/Math.PI

atan gives a value between -pi/2 and pi/2 (that is, between -90 and 90 degrees). But you can look at what quadrant your (xThem - xMe, yMe - yThem) vector is in and adjust accordingly.

樱&纷飞 2024-09-18 03:28:20

通俗地说:

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

In layman's terms:

function pointDirection(x1, y1, x2, y2) {
    return Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;
}
娇妻 2024-09-18 03:28:20

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

angle = Math.atan2(Cy-Ay,Ax-Cx)

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

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

In HTML5 canvas the origin is the top left corner hence the y axis grows from top to bottom. So regardless of wherever you are on the unit circle to calculate the angle of point A to the center(C) you should in fact do like

angle = Math.atan2(Cy-Ay,Ax-Cx)

and you will get your result in the range of [-π, π].

I have no idea why they haven't made the canvas origin the bottom left corner.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文