【问题标题】:Calculating degrees between 2 points with inverse Y axis用反向 Y 轴计算 2 点之间的度数
【发布时间】:2010-07-22 13:57:36
【问题描述】:

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

所以:假设我在 (10,10) 并且对象在 (10,5) - 这将导致 90 度(正 Y 向下,负 Y 向上) (10,10) 与 (10,15) 将是 270 度。

我该怎么办?

【问题讨论】:

  • 从哪里看到的角度?
  • 我很困惑您是如何确定角度的……您是否一直面向某个方向?
  • @rownage:除非我理解错了,否则重点是确定从一个位置指向另一个位置的向量的方向。
  • @Tim:是的,我迷路了,在看到 KennyTM 的回答后我明白了发生了什么(没有什么比帮助理解问题的好答案更好)

标签: javascript math trigonometry degrees


【解决方案1】:

假设你在 (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

【讨论】:

    【解决方案2】:

    如果你的坐标是(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 将知道您已经在哪个象限,因此您免去了最后一步。
    • 我仍然觉得这个答案很有用,这是一个不错的选择,因为我想自己控制象限。
    【解决方案3】:

    通俗地说:

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多