4.1 整合近似中軸線段
4.1.2 兩近似中軸線段是否面積重疊之判斷
(a) (b) 圖4-6 同一腳部區域之近似中軸線段:(a) 0°,(b) 135°。
4.1.2 兩近似中軸線段是否面積重疊之判斷
在步驟三中,我們為了將在同一肢體部位的近似中軸線斷集合中跟選取到的 近似中軸線段有交集的部分去掉,所以我們必須進行面積是否重疊之判斷。由於 近似中軸線段代表的其實是該肢體部位的骨架,為了呈現近似該肢體部位的形 狀,於是我們將近中軸線段兩端的橫截面當作梯形的上、下底,利用此梯形模型 來代表肢體部位的形狀。如圖4-7 所示,綠線代表兩端的橫截面,也就是梯形上 下底,紅線則是連接上下底的端點,也就是梯形的側邊。
圖4-7 利用梯形代表肢體部位的形狀。
為了判斷兩梯形面積是否有重疊,[12]的作法是藉由判斷兩梯形的四個邊及 一條對角線是否有相交,來判斷梯形是否重疊。此方法的優點是速度較快,但是 卻無法排除有較大的梯形包住較小的梯形或是只有一點或是一邊重疊的情況。因 此,本論文對此方法做一修改,令其能將上述情形也加以排除。由於前面部分是 引用[12]的作法來判斷線段是否相交,在此就不多加冗述,有興趣的讀者可參考 附錄B。接下來我們便延伸線段是否相交的判斷方式來進行兩梯形是否重疊的判 斷,其做法如下:
(1) 將兩梯形的邊,兩兩做線段是否相交的判斷,只要有兩個線段有相交,即代 表兩梯形有重疊。如果將所有的邊都做完線段是否相交的判斷後都沒有任兩 個線段相交,並不表示兩梯形不重疊,因為像是圖4-8(a)這種大的梯形包小 的梯形,或是圖 4-8(b)和 4-8(c)這種一點或一線重疊都會出現這種情形,則 接下來跳至步驟(2)做進一步地判斷。
(2) 我們利用CCW之方法來判斷點是否在一梯形中,如圖 4-8,針對一梯形T1的 四個端點A1、BB1、C1、D1以及另一梯形T2的A2B2B 、C2D2和A2C2、BB2D2這兩組 對邊和T2的四個端點A2、B2B 、C2、D2以及T1的A1BB1、C1D1和A1C1、B1B D1這兩 組對邊進行CCW之判斷。首先,針對一端點A1對一組對邊A2BB2、C2D2做CCW 之判斷,如果A1在A2B2B、C2D2的同一方向,代表A1不在T2的內部,如圖4-8(b),
則進行別的端點之判斷。如果A1在A2BB2、C2D2的相異方向,如圖4-8(a),或 是A1在A2B2B 或C2D2的延伸線上,如圖 4-8(c),則換做A1跟另一組對邊A2C2、 BB2D2做CCW之判斷,如果A1在A2C2、B2B D2的同一方向,代表A1不在T2的內部,
則進行別的端點之判斷。如果A1在A2C2、BB2D2的相異方向,如圖 4-8(a)、
4-8(c),或是A1在A2C2或B2B D2的延伸線上,則代表此點在這個梯形內部或是 邊上。
(3) 在做完所有點跟對邊的 CCW 判斷後,如果都沒有一點是在梯形內部或是邊 上,即代表這兩個梯形沒有重疊。
(a) (b) (c)
圖4-8 兩梯形重疊的特殊例子:(a) 大包小,(b) 一點重疊,(c) 一線重疊。
經過上面的步驟後,我們就可以知道兩梯形是否有重疊,然而我們也可清楚 地知道如果梯形沒有重疊,就必須做4×4=16 次的線段比較以及 8 次點是否在梯 形內部的判斷,而1 次的線段比較需要 4 次的 CCW 運算,1 次點是否在梯形內 部的判斷也需要4 次的 CCW 運算,所以共需要 96 次的 CCW 運算才能確定兩梯 形沒有重疊,加上經過我們觀察兩梯形不重疊的機率大於重疊的機率,因此在做 上述步驟之前我們先利用下列簡單的方式做篩檢,以減少判斷兩梯形沒有重疊所 花的計算時間:
(1) 將欲判斷是否重疊之兩梯形,找到各自的外接矩形(bounding box),令其中 一外接矩形的端點為(P1, P2)、(P3, P4),另一外接矩形的端點為(P5, P6)、
(P7, P8)。
(2) 如果|P1-P7|小於等於(|P1-P3|+|P5-P7|)且|P2-P8|小於等於
(|P2-P4|+|P6-P8|),則代表兩梯形有可能重疊,繼續做CCW之判斷。
如果條件不符,即代表兩梯形絕不可能重疊。
如圖4-9(a)呈現的是兩個梯形(T1、T2)沒有重疊其外接矩形(綠色虛線)也沒 有重疊,圖4-9(b)呈現的是兩個梯形(T1、T2)有重疊其外接矩形(綠色虛線)
也有重疊,圖4-9(c)中雖然兩個梯形(T1、T2)沒有重疊但是外接矩形(綠色虛 線)卻有重疊。因此,此方法雖然可以減少沒有重疊的梯形的計算時間,但同時 會增加有重疊的梯形的計算時間。本論文經過統計加入此方法可有效減少 10%
計算梯形是否重疊的時間。
(a) (b) (c)
圖4-9 兩梯形與外接矩形之關係:(a) 梯形與外接矩形皆不重疊,(b) 梯形與外接矩形皆重疊,
(c) 梯形不重疊但外接矩形卻重疊。