拼接菱形的衝突斷定方法(二)

上次我嘗試 從 座標軸映射, 或者說是數學分析的方法斷定衝突, 可是很難作到, 由於 難以計算點在仿射座標系的投影, 而且也有必定精度問題數組


下面採用 離散的方式:數學

首先對於一個拼接菱形的話, 若是咱們假設它的位置是離散化的, 以下圖: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   值是一個數組包含全部佔用該塊的建築 序列


下一章咱們描述若是進行衝突斷定

相關文章
相關標籤/搜索