上次我嘗試 從 座標軸映射, 或者說是數學分析的方法斷定衝突, 可是很難作到, 由於 難以計算點在仿射座標系的投影, 而且也有必定精度問題數組
下面採用 離散的方式:數學
首先對於一個拼接菱形的話, 若是咱們假設它的位置是離散化的, 以下圖:it
只能容許菱形和菱形之間的邊是對齊的,遍歷
而不能出現有錯位的狀況
方法
如何避免這種狀況呢, 有一種方法:im
咱們能夠把整個背景離散化, 根據單位菱形的寬度的一半sizeX 和高度的一半 把整個背景網格化, 同時要求每一個拼接菱形 的包圍矩形的左上點 和這個網格點對齊img
每一個拼接菱形 在水平移動的時候,每次跨動兩個單位, 垂直移動的時候, 每次跨動 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 值是一個數組包含全部佔用該塊的建築 序列
下一章咱們描述若是進行衝突斷定