是第二角度的左侧还是右侧的角度

时间:2015-07-14 22:33:56

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

我需要知道源角度的右侧或左侧是否有另一个角度。

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

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

1 个答案:

答案 0 :(得分:4)

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

显然,你可以向相反的方向旋转,然后走开"如果物体向右旋转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之间的角度对应于&#34;长途跋涉&#34;旋转,加上或减去360将它们转换为&#34;简短的方式&#34;。例如顺时针方向-350度(即逆时针方向350度)加上360方向相当于顺时针方向10度。

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