从角度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;
编辑:添加代码

从角度A移动到B,找到最短的方向

计算两个角度的差值。如果生成的角度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);
}