从角度A移动到B,找到最短的方向
本文关键字:方向 移动 | 更新日期: 2023-09-27 18:06:56
我有一个角A和一个目标角B
角度范围为-180到180
我想让角A向角B移动X度
我面临的问题是,如果A是170,B是-170,显然增加到180并跳转到-180更快,但在比较角度时,我总是得到一个负X。所以不是走最快的路,而是走最长的路。
我希望有人能理解我这个拙劣的问题:)
A = A + ((A-B) / Math.Abs(A-B)) * speed * -1;
编辑:添加代码
计算两个角度的差值。如果生成的角度x
大于180度,则使用此角度360-x
向另一个方向行走。
如果你使用0到360的范围,你可以更容易地计算差
下面是一个完整的例子:
void Main()
{
int speed = 5;
int angleA = 170;
int angleB = -170;
int antiClockwiseDistance = Math.Abs(180 - angleA) + Math.Abs(-180 - angleB);
int clockwiseDistance = angleB - angleA;
Console.WriteLine(clockwiseDistance);
Console.WriteLine(antiClockwiseDistance);
if(clockwiseDistance < antiClockwiseDistance)
{
angleA += speed;
}
else
{
angleA -= speed;
}
// TODO: Code to wrap an angle outside the range (i.e. 190 => -170)
Console.WriteLine(angleA);
}