計算網格中直線經過的格仔

2021-06-04 10:36:35 字數 981 閱讀 1995

關於在位圖上像繪製直線的演算法,可以參見:但是不同於在位圖上繪製直線,需要的是:一條直線經過哪些格仔。

假設有p0,p1兩個點,位置如下圖:

我們很容易得到連線的方程。首先我們按照在x上取整遞增,很容易計算出x=1, 2, 3, 4…時y的值是多少。

然後對y值取整,所得到(x1,y1),(x2,y2),(x3,y3)…肯定是連線過的格仔。

但是我們遺漏了這種情況,左上格也是連線經過的格仔,但由於我們只在x軸上進行取整遞增運算,沒有被考慮在內。

在(2)時已經可以知道a點座標,我們可以斜率來判斷連線是否經過上面一格。如果「藍色線的斜率小於p0-p1的斜率」,說明連線經過了上面一格。

利用這種方法,可以輕鬆計算出連線經過的所有格仔。

as3實現的demo:

原始碼:

/*** 返回網格中兩個點,連線經過的格仔。

* @see

*/public static function determinetouchedtiles(p0:point, p1:point):vector.

if (x0 > x1)

var ratio:number=math.abs((y1 - y0) / (x1 - x0));

var mirror:int=y1 > y0 ? 1 : -1;

for (var col:int= math.floor(x0); col < math.ceil(x1); col++)

if(!skip)

else

}//根據斜率計算是否有跨格。

if ((mirror > 0 ? (math.ceil(curry) - curry) : (curry - math.floor(curry))) < ratio)

else}}

return touched;

}

直線或線段與mesh網格相交的計算

第一步 判斷直線是否與三角形平面平行或在三角形平面內,這一步只需做直線方向向量與三角形法向量的點積即可,不詳細敘述。第二步 把三角形投影到二維平面上,我們可以想象一下把空間中的三角形投影到以已知直線作為法線的平面上,那麼直線在平面內的投影就只是乙個點,而三角形在該平面上還是乙個三角形,要判斷直線是否...

計算直線的交點數

time limit 1 sec memory limit 64 mb submit 820 solved 518 平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個...

績效管理中直線管理者的五種角色

績效管理是 人力資源管理的核心,在人力資源管理中起著舉足輕重的作用,這已經是業界的乙個共識。但另一方面,績效管理又是管理者比較不願意做的工作,許多管理者對績效採取迴避甚至是厭煩的態度。這種現狀使得我國的績效管理始終處於乙個較低的層面,績效管理的作用沒有完全發揮出來,給人 雞肋 的感覺,食之無味,棄之...