unity2.5D 45度菱形格子根据坐标点找到对应行列的格子

2.5D的45度菱形格子地图大概长这样

 注意0点在左下角,w代表列,h代表行,我这个格子是长60高30的格子,黑色是不能走的部分,白色是可以走的。

可以看出来虽然一个格子高30但是因为格子的排列方式是交错排列的,所以实际上高度每增加15就增加了一行,列数则是固定的每60增加一列,但是因为靠边的部分是交错的,所以还要考虑奇数行的位置偏差。

目前有三种思路,第一种是根据计算出这些格子的每个点的坐标,存到字典里,然后根据坐标点判断点是否在多边形范围内,这个其实是个笨方法,但是也最简单,地图格子如果比较多的话可能性能不太好。

另一种算法是根据函数曲线判断点是在曲线的左边还是右边,地图是由很多格子组成的,这些格子是由线段组成的,这些线段都可以看作函数曲线,0点就是十字坐标轴的0点,所有的同一个方向的曲线都可以通过标准式+偏移值来表达出来

还有一种算法是将地图看成长方形格子,每个长方形格子内都包含中间一个菱形以及四个角的直角三角形,中间菱形格子的行列跟四个角的直角三角形的行列关系是固定的,而中间菱形格子的行列可以直接通过坐标和地图格子的长宽算出来,将长方形当成是由左上,右上,右下,左下四个区域组成的,每个区域其实都是由两个直角三角形组成的,通过坐标直接能算出来是在哪个长方形格子内,然后通过小数点判断是在哪个区域内,然后将坐标点和区域内三角形的锐角点连线,求出这条线和锐角点相邻直角边的角

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值