資料結構中將 B-Rep 轉換為樹
1 B-rep 流
明確規定要設定一個生產者程序,該程序匯入一個 B-rep,外部由某些標準多邊形格式定義,例如 wavefront 或 java3D obj 檔案,將其匯入到我們幾何管道的輸入流中。多邊形和法線提供的邊界表示必須具有連貫的方向。對於主要在計算機圖形學中實現的通常存檔的幾何模型,可能需要對輸入檔案進行過濾以應對非平面多邊形和其他幾何不準確性。然後,將連貫定向三角形的輸出流透過以下描述的演算法步驟轉換為我們的雙重漸進 BSP(二叉空間劃分)樹。
2 B-rep 到 BSP 演算法概述
我們方法的基本過程是透過收縮每個三角形的預計算慣性來計算三角形子集的慣性,以及對三角形子集的慣性進行特徵分解,從而最佳地遞迴地限制其形狀。
在 d 維情況下,透過為尤拉矩陣的每個 d 個特徵向量實現 2 個極端切線超平面來獲得形狀限制。相應 2d 超空間的交集建立了當前單元格中包含的邊界子集的最佳擬合(超)平行六面體。在 3 維中,存在 6=2×3 個這樣的平面。
初始化
- 首先計算每個輸入三角形的仿射擴充套件尤拉張量(線性時間)。
- 將所有輸入三角形與 BSP 根節點連線。
- 將整個 E3 空間(它是凸的)連線到根節點。
- 將根節點標籤設定為 FUZZY。
遞迴情況
- 當前 FUZZY 單元格最多被 6 個正交超平面劃分,這些超平面垂直於當前三角形子集的尤拉張量的矩陣表示的特徵向量。
- 這些平面是透過在當前三角形子集的頂點 v 上計算的線性函式 w = a • v 的最小值和最大值來計算的,其中 a 表示當前特徵向量。
- 對於每個特徵向量,透過兩個最大-最小平行超平面最多產生三個凸單元格,這些單元格是 {OUT,FUZZY,IN} 或 {OUT,FUZZY,OUT}。
- 每個 FUZZY 單元格將被與最大特徵向量相關的 principal 超平面進一步劃分。
- 透過對其頂點的包含性測試,將較小的三角形子集加入到每個劃分單元格。
- 穿過劃分平面的三角形將被劃分,並且(子)三角形將加入到節點子樹。
基本情況
噹噹前單元格僅包含少量邊界三角形時,基於慣性的遞迴劃分停止。透過實現邊界三角形的平面執行最終單元格劃分。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP