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

时间:2011-08-30 11:39:41

标签: c# math angle

我有一个角度A和一个目标角度B

角度范围是-180到180

我希望角度A向角度B移动X度

我面临的问题是如果A是170并且B是-170,那么增加到180并且跳到-180显然会更快,但是在比较角度时我总是得到负X.因此,不是以最快的方式采取最长的方式。

我希望有人能理解我制定的问题:)

A = A + ((A-B) / Math.Abs(A-B)) * speed * -1;

编辑:添加了代码

3 个答案:

答案 0 :(得分:6)

计算两个角度之间的差异。如果生成的角度x大于180度,则使用此角度向另一个方向行走:360-x

如果使用0到360的范围,则可以更轻松地计算差异。

答案 1 :(得分:1)

这是一个完整的例子:

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);
}

答案 2 :(得分:0)

想象一下,如果你是一个人,你就会遇到这个问题需要解决。你会怎么做?

写下五六个例子,包括“特殊”角度,如0,180,-180和接近它们的值。

绘制每个例子。

要找到一个使用一个或两个条件并得出结果的简单且易于理解的算法并不难。

特别是,您只需要找到最短的两条路径,所以一个好的抽象是找出每条路径的长度,然后只需比较它们并选择一条路径长度较短。