[原]拼接菱形的冲突判定方法(二)
上次我尝试 从 坐标轴映射, 或者说是数学分析的方法判定冲突, 但是很难做到, 因为 难以计算点在仿射坐标系的投影, 并且也有一定精度问题
下面采用 离散的方式:
首先对于一个拼接菱形的话, 如果我们假设它的位置是离散化的, 如下图:
只能允许菱形和菱形之间的边是对齐的,
而不能出现有错位的情况
如何避免这种情况呢, 有一种方法:
我们可以把整个背景离散化, 根据单位菱形的宽度的一半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 值是一个数组包含所有占用该块的建筑 序列
下一章我们描述如果进行冲突判定
作者:liyong748 发表于2012/5/20 14:11:49 原文链接
阅读:201 评论:0 查看评论