• 沒有找到結果。

3. 架構與實作

3.2 資料結構

3.2.3 與 Shewchuk 的 Triangle 比較

圖 5-7:Mesh 物件是指向一組 Vertex(頂點)、一組 TrianglePatch(三角形)、一組 TriangleEdge

(三角形的邊)、一組邊界以及一組 GhostTriangle 的指標集合。GhostTriangle 圍繞在網格邊界,

並以逆時針方向排序。

3.2.3 與 Shewchuk 的 Triangle 比較

Triangle 是 一 個 C 語 言 程 式 的 二 維 Delaunay 三 角 形 網 格 產 生 程 式 , 可 在 Shewchuk的Triangle網頁免費下載[25]。Triangle不僅快速,省記憶體空間,亦 功能強大,關於Triangle程式的介紹可以參考[3]。Stella以C++ 程式語言設計,

物件為基礎的程式,用於二維結構或三維多面體的Delaunay三角形網格生成與適 應性網格細分。Stella的設計中,許多部分參考Triangle資料結構的設計。在這 一節,比較Stella與Triangle的基本幾何資料結構設計上異同,並討論這些不同 設計的優缺點。

Stella 與 Triangle 最大的不同點是:在 Triangle 中,任何幾何資料結構,

不管是頂點、邊、三角形,都可以接上任意數量的使用者自訂屬性參數,屬性參 數的數量在程式執行時才決定。在 Stella 的實作中,沒有這一部份,所有需要的

屬性參數都已經定義在資料結構中。Triangle 的設計較為彈性,因為它不是為特 定應用設計的網格產生器,所以必須含有使用者自訂的參數。實作上,Triangle 僅用一個指標指向一個存放所有的屬性參數的陣列,此陣列在程式執行時才會定 義。

其餘部分的資料結構設計,Stella和Triangle是大同小異的。三角形資料結 構都含有三個節點、三個邊、三個相鄰的三角形。邊的資料結構都含有兩個節點、

兩個相鄰三角形,以及一個記錄此邊是否為邊界的參數。其中有兩點不同,

Triangle的邊含有兩個指標分別指向兩組相鄰的邊,而Stella的邊沒有;Triangle 不記錄邊的長度,而Stella有,因為Stella在網格細分時,常利用頂點周圍的邊 長檢查網格是否均勻分佈。頂點資料結構的部分,Stella和Triangle都含有x和y 座標位置,不同的是,Stella的頂點含所有相鄰三角形的資料,而Triangle的頂 點只含有一個『可能』包含此頂點的三角形資料;換言之,在Stella程式中,可 以迅速找到含有一個頂點的所有三角形,而在Triangle程式中,頂點只記錄一個 可能包含此頂點的三角形,如果這筆記錄剛好是要找的三角形,那可以大大地節 省搜尋的時間,最壞的情況(這筆三角形的記錄是錯的),還是要搜尋全部的三角 形。Stella的頂點含有所有相鄰邊的資料,雖然Triangle的頂點不記錄其相鄰邊,

但Triangle邊資料結構中記錄該邊的相鄰邊的功用,其實與Stella的頂點記錄其 相鄰邊的功用相同。表格 5-1和表格 5-2列出Stella和Triangle基本幾何資料結構 的比較。

此外,Stella 亦保留了 Triangle 中的 GhostTriangle(不完整的三角形,只 含有一個邊和兩個點),因為 GhostTriangle 在 divide-and-conquer Delaunay 三 角形分割演算法的實作中,非常有用。

表格 5-1:比較 Stella 和 Triangle 的基本幾何資料結構

Shewchuk's Triangle Stella 相似點

皆記錄三個節點、三個邊、三個相鄰的三角形

若三角形之任一邊沒有相鄰三角形時,皆有 GhostTriangle 相異點

TrianglePatch

任意數量的使用者自訂浮點數 TriangleEdge

不記錄邊長 記錄邊長

Vertex

不記錄含有此頂點的邊 含有一串列記錄所有含有此頂

點的邊

表格 5-2:比較 Stella 和 Triangle 的基本幾何資料結構(O:有 X:沒有)

比較項目 Shewchuk's Triangle

Stella

三個頂點 O O

三個邊 O O

三個相鄰三角形 O O

TrianglePatch

任 意 數 量 使 用 者

TriangleEdge

邊長 X O

Vertex

相鄰三角形 X O

相關文件