2.5D的45度菱形格子地图大概长这样
注意0点在左下角,w代表列,h代表行,我这个格子是长60高30的格子,黑色是不能走的部分,白色是可以走的。
可以看出来虽然一个格子高30但是因为格子的排列方式是交错排列的,所以实际上高度每增加15就增加了一行,列数则是固定的每60增加一列,但是因为靠边的部分是交错的,所以还要考虑奇数行的位置偏差。
目前有三种思路,第一种是根据计算出这些格子的每个点的坐标,存到字典里,然后根据坐标点判断点是否在多边形范围内,这个其实是个笨方法,但是也最简单,地图格子如果比较多的话可能性能不太好。
另一种算法是根据函数曲线判断点是在曲线的左边还是右边,地图是由很多格子组成的,这些格子是由线段组成的,这些线段都可以看作函数曲线,0点就是十字坐标轴的0点,所有的同一个方向的曲线都可以通过标准式+偏移值来表达出来
还有一种算法是将地图看成长方形格子,每个长方形格子内都包含中间一个菱形以及四个角的直角三角形,中间菱形格子的行列跟四个角的直角三角形的行列关系是固定的,而中间菱形格子的行列可以直接通过坐标和地图格子的长宽算出来,将长方形当成是由左上,右上,右下,左下四个区域组成的,每个区域其实都是由两个直角三角形组成的,通过坐标直接能算出来是在哪个长方形格子内,然后通过小数点判断是在哪个区域内,然后将坐标点和区域内三角形的锐角点连线,求出这条线和锐角点相邻直角边的角