坐标转换带来的阻碍判断出错
今天调试程序,发现人经常走到不可走的区域去了。
我用的从直角到斜角的转换公式是:
\( 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用的是很严格的判断必须正上和正右方的格子都可走,才允许往斜上走。