拼接菱形的冲突判定方法(二)
博客专区 > 李勇2 的博客 > 博客详情
拼接菱形的冲突判定方法(二)
李勇2 发表于3年前
拼接菱形的冲突判定方法(二)
  • 发表于 3年前
  • 阅读 12
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

上次我尝试 从 坐标轴映射, 或者说是数学分析的方法判定冲突, 但是很难做到, 因为 难以计算点在仿射坐标系的投影, 并且也有一定精度问题


下面采用 离散的方式:

首先对于一个拼接菱形的话, 如果我们假设它的位置是离散化的, 如下图:

只能允许菱形和菱形之间的边是对齐的,

而不能出现有错位的情况


如何避免这种情况呢, 有一种方法:

我们可以把整个背景离散化, 根据单位菱形的宽度的一半sizeX 和高度的一半 把整个背景网格化, 同时要求每个拼接菱形 的包围矩形的左上点 和这个网格点对齐



每个拼接菱形 在水平移动的时候,每次跨动两个单位, 垂直移动的时候, 每次跨动 2个单位, 

而斜着移动的时候,水平跨越1个单位, 垂直跨越1个单位 如图:

为了满足这个条件, 避免出现两个菱形只有一半相交的情况,  首先如何表示坐标;

既然是离散化的我们可以采用两个整数 作为 天然的坐标 x, y

只要保证x  y 的奇偶 性相同(或者时刻相反), 就可以满足上面的移动规律。


我们需要把一个拼接菱形所有的占据的块计算出来, 已知左上角 为 x, y 编号

那么 根据上一篇文章中的结论, 拼接菱形最上面的点的编号是:(sx, sy 是拼接菱形的宽度和高度)

(x+ sy,  y)

for i  < sx

   for j < sy

开始遍历每一个方块, 根据定义, 向右x正方向, 向 下 y正方向

菱形x方向移动, 则initX+1 initY+1

y方向移动, initX-1 initY+1

这样就能得到所有块的编号


采用一个哈希表存储, 键值是x*10000+y   值是一个数组包含所有占用该块的建筑 序列


下一章我们描述如果进行冲突判定




标签: 存储
共有 人打赏支持
李勇2
粉丝 43
博文 183
码字总数 60421
×
李勇2
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: