如何在限制转弯的同时沿着基本方向在笛卡尔空间内移动?

Mat*_*ias 5 algorithm math coordinates coordinate-systems

给定是笛卡尔坐标系,从位置A(X/Y)和到位置B(X/Y).我想从A移动到B.但是,我只能移动N,NE,E,SE,S,SW,W,NW八个方向.

我知道我可以计算这些方向的"最佳",从当前位置A通过点积乘以轴的单位矢量(八个方向),其中最大的点积是要采取的方向.但是这种方法导致两个方向之间出现某种"振荡",如果A正好在这两个方向之间.

所以我现在正在寻找一种算法来解决从A到B只有一个或最大的问题.两个方向使用.当然我现在忽略了任何障碍,所以理论上我总是可以从A到B获得最多两个不同的方向.我可以用一堆if语句解决这个问题,但我更喜欢更优雅的解决方案......

我希望这有点可以理解:)

提前感谢任何想法!

亲切的问候,马蒂亚斯

and*_*oke 5

最简单的解决方案是沿"对角线"方向前进,直到与目标位于同一行/列,然后使用水平/垂直方向.

换一种说法:

  • 检查你是否水平/垂直对齐.如果是这样,朝那个方向移动并完成.
  • 否则,使用您拥有的方法找到最接近的对角线方向.
  • 沿对角线移动,直到水平或垂直对齐.然后向那个方向移动并完成.