坐标转换带来的阻碍判断出错

今天调试程序,发现人经常走到不可走的区域去了。

我用的从直角到斜角的转换公式是:

\( x’=x/2+y \)
\( y’=y-x/2+400 \)

格子的边长30
起点斜角坐标(2370,13020),除以30得到(79,434)
终点斜角坐标(2370,13080),除以30得到(79,436)

起点直角坐标(1350,1695)
终点直角坐标(1290,1725)
这两点在直角坐标下的距离是67.08203932499369
沿着这条线走2.24个像素。
于是得到直角坐标
1347.9964830921601
1696.0017584539198
取整得到
1347 1696
换算成斜角是
2369 13023
再除以格子的边长30,得到
78 434

完蛋了。刚才是在x=79这条线上移动,但是现在跑到x=78这条线上去了。

走到不可走的点,其实,也是正常的。区别在于寻路时候的依据。假如我现在站在中央格子,要向右上方走。障碍图如下

(可走) (可走) (可走) (可走)
(可走) (不可走) 终点(可走) (可走)
(可走) 起点(可走) (可走) (可走)
(可走) (可走) (可走) (可走)

那么是否允许直接斜着走过去?还是必须先往右走再上去?如果按照前者来,那么就出现走到不可走点的情况。因为它可以先往某一个目的点走一点,使得它尽管依然在起点的格子内,但是不是在格子正中间,然后往斜上走。在走了几毫秒之后停下来。而在完美的时候,lch用的是很严格的判断必须正上和正右方的格子都可走,才允许往斜上走。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥