【问题标题】:Is angle to the left or right of second angle是第二个角的左边还是右边的角
【发布时间】:2015-07-14 22:33:56
【问题描述】:

我需要知道另一个角度是在源角度的右侧还是左侧。

我试图减去角度并得到它们的绝对值,但范围是从 -180 到 180,这意味着当我转到 180 并转到 -180 时,它会给我相反的答案。

如果你想知道这是做什么用的,我正在开发一个 Java 游戏,其中有一个由鼠标控制的坦克炮塔。

【问题讨论】:

标签: java math game-engine game-physics angle


【解决方案1】:

这取决于您的角度是指定顺时针还是逆时针方向的旋转。如果您朝坦克炮塔的方向看,那么如果您需要顺时针旋转炮塔以尽快指向它,那么一个物体在右侧,如果您需要逆时针旋转,则在左侧。

显然,您可以向相反的方向旋转以“绕远路”:如果一个物体向右旋转 10 度,那么您可以顺时针旋转 10 度或逆时针旋转 350 度以指向它。但是让我们只考虑短的方法,假设角度是按顺时针方向指定的:

// returns 1 if otherAngle is to the right of sourceAngle,
//         0 if the angles are identical
//         -1 if otherAngle is to the left of sourceAngle
int compareAngles(float sourceAngle, float otherAngle)
{
    // sourceAngle and otherAngle should be in the range -180 to 180
    float difference = otherAngle - sourceAngle;

    if(difference < -180.0f)
        difference += 360.0f;
    if(difference > 180.0f)
        difference -= 360.0f;

    if(difference > 0.0f)
        return 1;
    if(difference < 0.0f)
        return -1;

    return 0;
}

减去角度后,结果可以在 -360(-180 减去 180)到 360(180 减去 -180)的范围内。您可以通过加或减 360 度将它们带入 -180 到 180 的范围内,然后与零进行比较并返回结果。

绝对值在 180 到 360 之间的角度对应于“长距离”旋转,加上或减去 360 度会将它们转换为“短距离”旋转。例如,顺时针 -350 度(即逆时针 350 度)加上 360 等于顺时针 10 度(短途)。

如果指定的角度是逆时针方向,则返回值的含义相反(1表示左,-1表示右)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多