[原]拼接菱形的冲突判定方法(二)

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


下面采用 离散的方式:

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

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

而不能出现有错位的情况


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

我们可以把整个背景离散化, 根据单位菱形的宽度的一半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 查看评论
posted @ 2012-05-20 14:12  liyonghelpme  阅读(174)  评论(0编辑  收藏  举报