是第二个角左边或右边的角
Is angle to the left or right of second angle
我需要知道另一个角度是在源角度的右边还是左边。
我试图减去角度并得到它们的绝对值,但范围是从 -180 到 180,这意味着当我转到 180 和转到 -180 时,它会给我相反的答案。
如果您想知道这是干什么用的,那是我正在开发的 Java 游戏,其中有一个由鼠标控制的坦克炮塔。
这取决于您的角度指定的旋转方向是顺时针还是逆时针。如果您朝坦克炮塔的方向看,那么如果您需要顺时针旋转炮塔以尽快指向它,则物体位于右侧,如果您需要逆时针旋转,则物体位于左侧。
显然,您可以向相反的方向旋转"the long way around":如果一个物体向右旋转 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 的范围内,然后与零进行比较,然后 return 结果。
绝对值在180到360之间的角度对应"long way around"个旋转,加减360转为"short way around"。例如 -350 度顺时针方向(即逆时针方向 350 度)加上 360 等于顺时针方向 10 度方向。
如果指定的角度是逆时针方向,那么return值的意义就相反(1表示左,-1表示右)
我需要知道另一个角度是在源角度的右边还是左边。
我试图减去角度并得到它们的绝对值,但范围是从 -180 到 180,这意味着当我转到 180 和转到 -180 时,它会给我相反的答案。
如果您想知道这是干什么用的,那是我正在开发的 Java 游戏,其中有一个由鼠标控制的坦克炮塔。
这取决于您的角度指定的旋转方向是顺时针还是逆时针。如果您朝坦克炮塔的方向看,那么如果您需要顺时针旋转炮塔以尽快指向它,则物体位于右侧,如果您需要逆时针旋转,则物体位于左侧。
显然,您可以向相反的方向旋转"the long way around":如果一个物体向右旋转 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 的范围内,然后与零进行比较,然后 return 结果。
绝对值在180到360之间的角度对应"long way around"个旋转,加减360转为"short way around"。例如 -350 度顺时针方向(即逆时针方向 350 度)加上 360 等于顺时针方向 10 度方向。
如果指定的角度是逆时针方向,那么return值的意义就相反(1表示左,-1表示右)