确定最短路线的方向

Determining direction for the shortest route

首先,这是一道数学题,我不是在寻找与图像处理相关的代码。

我有一个罗盘,0 到 360 度。

指针当前指向 0 度。

指针位置永远不能超过 360 (compassLimits.Max) 并且永远不能低于零度 (compassLimits.Min),这些都是任何指南针的常规限制。

我想通过最短路线以 1 度为步长将指针移动到下一个位置。

如果下一个位置(目标)在10度,我想把针移动到11度,然后12度等等,直到我到达目标位置。

但是,如果目标位置是350度,我想将针向后移动到359、358等

我可以使用以下 (C#) 算法确定哪条路线最短:

var compassLimits = new
    {
        Max = 360.0,
        Min = 0.0
    };

var indirect = Math.Abs(compassLimits.Max - targetValue) + Math.Abs(compassLimits.Min - currentValue);
var direct = Math.Abs(targetValue - currentValue);
if (direct < indirect)
{
    shortestDistance = direct;
}
else
{
    shortestDistance = indirect;
}

我现在需要确定针是应该向前移动还是向后移动以到达目标,而我的大脑今天不工作,所以与其反复试验和错误尝试,我想我应该把它扔掉.

显然,我不能指望目标值大于当前值,因为这对于从 0 度移动到 10 度时效果很好,但在从 0 度移动到 350 度时会失败。

上面的 shortestDistance 变量始终为正值,因为我正在使用 Math.Abs() 来计算它。

那么如何确定指针应该移动的方向呢?

这取决于直接和间接以及目标值是否大于当前值,所以你有两个一半的答案:

 if (direct < indirect)
 {
       shortestDistance = direct;
       if (currentValue < targetValue)
       {
           Console.WriteLine("Forward");
       }
       else
       {
            Console.WriteLine("BackWard");
       }
  }
  else
  {
      shortestDistance = indirect;
      if (currentValue < targetValue)
      {
          Console.WriteLine("BackWard");
      }
      else
      {
          Console.WriteLine("Forward");
      }
  }