• 沒有找到結果。

三、曲面相交模型的建立

在建立大腿骨模型時,為求建立之截面精準度,必需以一平面與 大腿骨相交,並且知道相交的位置,所以求取交線是建立模型重要的 一環,而在大腿骨的模型建立時,情形並不那麼複雜,且我們都可以 預料大略的相交情形為一封閉曲線,故本章的 SSI以相交出一個封閉

曲線為依據。所使用的演算法則介紹如下:

Bernhill於1989年對解決SSI問題的技巧提出了一套演算法則,那 是一種步進法 (Marching Method)。這種演算原理也包含了五種不同 的步驟:

(1) 篩檢 (Culling)

(2) 尋找起始點 (Starting point) (3) 找出真實交點 (Refinement) (4) 循跡 (Tracing)

(5) 組成參數曲線 (Curve fitting) 3-1 篩檢(Culling)

將曲面模型先分割成彼此相連的四角綴面 (patch),並將其按行 列編號,使其在整個曲面模型當中有一明確位置,而此分割的粗細將 會嚴重的影響到往後的速度,及尋找相交曲線的完整性。以往的分割

幾乎是隨設計者個人的喜好,但一般的分法是在曲面變化較大的部份 採取較密的分割,因曲面變化大的地方僅以一四角綴面的四個角點之 位置向量及 u,v方向切線向量來描述,可能過於粗糙,所以將其細分 使各綴面之曲面變化小於一定範圍以下,可使 SSI過程更精確而快 速,但也需注意不可太過嚴格,否則可能導致反效果增加運算時間,

此一檢查工作,在一開始劃分綴面時就需進行,否則 SSI進行至一半 再回頭重新分割會增加相當長的運算時間,而要達到上述要求,則對 各綴面進行下列檢查:

linearity T

Tij <

1

flatness N

Nij <

1 ( 3-1)

Ti、Tj分別代表不同曲面點之切線向量 (包含 u,v兩方向),而 Ni、Nj 則代表法線向量,上式需要決定的是 linearity及flatness,這 兩個數控制了整體的表現,檢查的方式是將各綴面之角點代入(3-1) 式測試,若不合則進行細分,直到各綴面合於要求開始進行篩檢。

篩檢的目的在於以box test之方式,先找出不相交的綴面加以剔 除,不用進行以下的計算以節省不必要的計算時間,先對各綴面找出 一六面體可以完全涵蓋此綴面,稱之為bounding box,而box之求取方 式影響了是否會有相交誤判之現象發生(即實際不相交而 box test相

(3-1)。首先選擇V1-V0,V3-V0為 box兩軸,再將此兩軸外積得出第三 軸,再沿 u,o兩軸取出適當長度包含V2,再來決定 a軸上之邊長,其 邊長為2Ha,而Ha 由圖(3-6)定義,其中La為 V2V1V3V1 中較大 者,而a為(4-1)式中linearity與 flatness較大者,Ha定義如下:

αα +

= − 1 1 2

a a

H L ( 3-2)

由上式可完整定出box,而若由於linearity及 flatness的限制夠 嚴,使曲面不致變化曲度過大,則亦可採取產生較客易的極大極小法 (Max/Min bounding box)進行檢查。

box 建立好之後,再來是做相交測試,方法是先將曲面一的box 之十二個邊與曲面二的box 之六個面做線與面之相交測試,如有相交 則停止此一對綴面之測試並記錄其編號,如無相交則對調兩曲面角色 再進行試驗,若仍無相,交則剔除此對編號,直到兩兩綴面都進行完 篩檢再將相交的綴面對進行以下的程序。

3-2 尋找起始點(Starting point)

針對上述得到的數對(pair)之四角綴面,以一定之參數間隔做出 均佈於綴面參數域的參數點,於曲面一之綴面相鄰兩點連一線段,曲 面二之綴面每四點間連成兩個三角形,對所有的線段與三角形找交 點,首先需判斷線段是否與三角形所在平面相交,即線段兩端點在平 面兩側,再判斷交點是否落於三角形內,即交點是否在三邊與其對頂

點所形成之三組平行線內,此一測試需投影至 xy,yz,zx 三平面分別 測試,若以上測試皆通過,則可找到一起始點,則記錄此點位置及兩 綴面上之參數值做為下面refinement中Newton-Raphson法的初值。

因為起始點只是在很接近曲面的平面上,故需以refinement將其 逼近回兩曲面上,另每一綴面數對找到一起始點後,即可停止繼續進 行下一數對,因為我們現在是簡單曲面相交,在每對綴面相交情形會 有一條相交曲線。而每個數對皆求出一起始點可用來檢查循跡出的相 交曲線是否通過各refine後的起始點,藉此判斷是否找出了完整的相 交曲線,若通所有數對,則SSI 結束,否則需對尚未經過的起始點進 行以下相同的步驟。

另外因我們可預估飛機模型上的相交情形應只有一條封閉曲 線,故為了節省計算時間,可以只求出一個起始點,就開始進行以下 步驟,因可由這一點沿封閉曲線方向找出完整曲線,但如此曲線是否 通過原起始點,與tolerance的取決有關,否則可能因為循跡的誤差使 交線並未真正通過起點而使循跡無法中止,亦可能值太大而誤判曲線 已通過原始點使相交曲線不完整。

3-3 找出真實交點(Refinement)

由3-2之步驟所找到的起始點,並非真正位於曲面交線上的點,

因前述的線段及三角形都共通過參數點所構成之平面而非曲面,故起

始點與曲面的距離,隨所取之參數間隔以及(3-1)式所決定的linearity 和flatness而定,所似需要利用refinement來將前述之起始點逼近回曲 面上得到真實之起始曲面點,才能進行循跡工作並且在循跡時會產生 猜測點 (guess point),這些點也並曲面點,同樣的也需以refinement 逼近回真實點,所以本步驟對SSI 整體的準確性及速度影響甚鉅。

Refinement之詳細做法是參考Houghton所提之方法,首先需有一 起點與兩綴面足夠接近但不位於綴面上,先由此點對兩綴面找出最近 點,即找出曲面上何者之法線向量通過起始點,找出這兩個最近點與 起始點後再分別求通過此點對綴面之切平面,再做通過兩最近點與起 始點之平面,三平面交於一點,見圖(3-4) ,再以此點為起始點重覆 上述步驟,直至前後兩次所求出之起始點距離小於一誤值時,即代表 此點已逼近到距曲面某一微小範圍內,則refinement完成。

上述步驟中,最重要也最困難的部份是求綴面上之最近點,

(N-P)×(Nu×Nv)=0可依求解,其中(Nu×Nv)即為欲求之最近點之曲面法 向量,未知數為N 之u,v 參數,兩個未知數,有三個非線性方程式可 選取其中兩個方程式利用Newton-Raphson法求解,會遇到的問題是牛 頓法需要一足夠接近解的起始值,我們在求起始點時已有記錄u,v 起 始值,但記錄的是相交測驗時的端點參數值,可能會因前項步驟所取 的參數間隔過大而造成起始值不夠接近真實解,而使牛頓法發散無法

得致變歛值,首先可先做起始點與附近四個參數點的距離測試,因可 能不用重新細分間隔,只要選擇的起始參數值是距起始點最近的就可 使牛頓法收歛,而不必多花時間重做細分及找尋起始點的工作,但若 此一方法仍無法改善發散情形,則只好重新細分再重覆之前的工作,

等到refinement步驟完成我們即找到一實際位於曲面交線上(或十分 接近)的起始點,再開始下面循跡的步驟。

3-4 循跡(Tracing)

由前節所得到的真實起始點開始以trace 的方式,可將一系列的 相交曲線點找出,得到一完整的相交曲線。

首先我們必須先找出trace 的方向,先在起始點上對兩綴面做切 平面,再以此兩切平面之相交直線的方向向量,做為我們循跡的方

向,詳細求法是先求起始點在兩綴面上的法線向量 、 再

由此兩法線向量外積得到交線之方向向量,因為在兩切平面上只有交 線會同時垂直兩法向量,故循跡方向,見圖(3-5)。

v

u S

S1 × 1 S2u×S2v

方向決定後再來需選取一適當的步長(Stepsize),步長若過長,則 接下來的refinement工作,可能導致牛頓法無法收歛,但若取太短又 會影響整體的速度表現,所以在此採用適應性步長(Adaptive Step Length)的方法,即根據起始點之曲率(currature)來決定步長,因在trace 時會發生牛頓法發散的情形通常是在曲率較大而步長又過長時,使得

猜測點(guess point) 偏離曲面過遠所致,步長可依照L= ρΔθ 決定,ρ 是曲率半徑,而Δθ則為一固定的角度常數,首先欲求曲率半徑,先 由起始點沿交線正負方向各取一微小距離得兩鄰近點,將此兩點以 refinement方式逼近回相交曲線上,由此三點構成一緊密圓(osculating circle)可求出曲率半徑ρ,再定出Δθ,即可依此適應性步長,繼續循 跡的工作。

將起始點沿交線方向取一步長長度,得一猜測點,再將猜測點逼 近回曲線,再將新的曲線點定為起始點重覆以上trace 動作,直到遇 到曲面邊緣(非封閉曲線),再由原起始點沿反方向循跡,直到遇到另 一個曲面邊緣為止,完成一序列之曲線點,或者是循跡又再遇到原始 起點(封閉曲線),若我們做的是曲面簡單相交(即只有一條相交曲線) 則trace 結束,否則就需要檢查原先各數對中所存之所有起始點,針 對尚未通過的起始點,做相同的循跡工作,直到所有的起始點都被通 過為止。

3-5 組成參數曲線(Curve fitting)

循跡完畢後,所得到的是一序列的點,但為了便於應用,需組成 曲線參數方程式,便於以後定義平滑接面(fairing patch)之邊界,採取 的方式是在循跡時若曲面點越過邊界則將之前屬於同一個綴面的曲 面相交點,以一三次曲線參數式來表示,方法是將一序列的相交點,

由一端開始計算出相鄰點間的距離,再將各點的參數值以此點之前的 距離總合除以全部距離(即由t=0 到這點的曲線長度除以總曲線長)

表示,則將各點代入三次曲線參數式,利用最小平方法(least square method)可找出這曲線的兩端切線向量,再配合起終點的位置可表示 出一完整的曲線,即為最適合曲線,來表示兩曲面的相交曲線,由於 我們在循跡時,取的點夠密集,所以可以各點間的距離和來表示曲線 長度,求得最適合曲線。

3-6 圓柱-球交線測試 以4個例子測試:

(1)側面相交:圖(3-6) (2)頂部相交:圖(3-7) (3)頂部相交:圖(3-8) (4)貫穿相交:圖(3-9) 3-7 曲面相交的應用

為求所建大腿骨外型的精準度,所以利用曲面相交模型的演算解

為求所建大腿骨外型的精準度,所以利用曲面相交模型的演算解

相關文件