嗨,谢谢你的阅读 .
我需要改变我写的这个空白,以便它可以用负角度工作 .
此功能的目标是通过向顺时针或逆时针(或 - )添加INCREMENT将ANGLE旋转到DIRECTION .
然而,我所说的问题是它不适用于小于0或大于360(2pi)的数字 . 我也需要能够使用负角度 .
我尝试了几种东西但是暂时无法工作 . 任何人都可以帮我一把吗?我将不胜感激 . :d
public void ToDirection(float Increment, float Direction)
{
if (CurrentAngle != Direction)
{
float ClockwiseDifference;
float CounterClockwiseDifference;
//Clockwise
if (Direction < CurrentAngle)
{
ClockwiseDifference = CurrentAngle - Direction;
}
else
{
ClockwiseDifference = Constants.Rotation_360 - (Direction - CurrentAngle);
}
//CounterClockwise
if (Direction > CurrentAngle)
{
CounterClockwiseDifference = Direction - CurrentAngle;
}
else
{
CounterClockwiseDifference = Constants.Rotation_360 - (CurrentAngle - Direction);
}
float CurrentFaceSpeed = Increment;
if (ClockwiseDifference == CounterClockwiseDifference)
{
if (Globals.Randomizer.Next(0, 2) == 0)
{
if (ClockwiseDifference < CurrentFaceSpeed)
{
CurrentAngle = Direction;
}
else
{
CurrentAngle -= CurrentFaceSpeed;
}
}
else
{
if (CounterClockwiseDifference < CurrentFaceSpeed)
{
CurrentAngle = Direction;
}
else
{
CurrentAngle += CurrentFaceSpeed;
}
}
}
else if (ClockwiseDifference < CounterClockwiseDifference)
{
if (ClockwiseDifference < CurrentFaceSpeed)
{
CurrentAngle = Direction;
}
else
{
CurrentAngle -= CurrentFaceSpeed;
}
}
else
{
if (CounterClockwiseDifference < CurrentFaceSpeed)
{
CurrentAngle = Direction;
}
else
{
CurrentAngle += CurrentFaceSpeed;
}
}
}
if (CurrentAngle >= Constants.Rotation_360)
{
CurrentAngle -= Constants.Rotation_360;
}
else if (CurrentAngle < 0)
{
CurrentAngle += Constants.Rotation_360;
}
}
2 回答
只需展开角度即可 . 然后你'll always have angles from 0 to 360. Unwrap the starting angle and the target angle, then perform your turn. Here'是一个工作的例子(你真正需要的唯一方法是
UnwrapAngle()
) .这个答案似乎很好地涵盖了这个主题:Work out whether to turn clockwise or anticlockwise from two angles
RE:小于0或大于360的角度 . 基本上,-10与350相同.720与360相同 . 因此,如果转换入射角度使其位于0到360之间,那么所有问题都是已解决(假设您的代码适用于0和360之间的值,如您所示) .
这是我自己做过的事情(以前用不同的语言):