對於OBB是什么不作介紹,如果你能看到這篇文章,我覺得你應該知道OBB是什么,也大概知道OBB的經典生成算法:使用PCA(主成分分析)。
主成分分析有一個關鍵的線性代數計算步驟,即求解協方差矩陣的特征值和特征向量,這一點必須使用數值分析算法而不能用解題用的基本行變換手段,因為現代程序最大的特點就是干一些枯燥重復的事情——迭代嘛。
在這里主要介紹三維的思路,黑盒模型:
obb的參數(中心點、三軸向量、三軸半長,以確定一個空間中的矩形)= f(點集)
步驟① 分解點集的xyz分量
即把所有點的 x、y、z 值分別放到獨立的數組中
步驟② 對x、y、z這三個隨機變量(一維數組)求協方差矩陣
步驟③ 對步驟②中的協方差矩陣求解特征值與特征向量,特征向量構造列向量矩陣M
步驟④ 將點集的幾何中心平移至坐標系原點,並全部乘以M矩陣進行旋轉變換
步驟⑤ 將旋轉變換后的點的坐標,求xMax、xMin、yMax、yMin、zMax、zMin,進而求出obb中心坐標、obb半長
步驟⑥ 將obb中心坐標左乘M的逆,得到此中心坐標在原來坐標系的坐標值
步驟⑦ 將步驟⑥中得到的原坐標系下的obb中心坐標平移回原處(平移向量與步驟④的平移向量剛好是相反向量)
最后,得到:
- 特征向量作為obb的三個軸朝向
- obb的三個方向的半長
- obb的中心坐標
其中,計算難點在於步驟③,最經典的做法是使用 Jacobi 迭代計算算法,在數值分析課程中是一節基礎,Jacobi 算法還是可以優化的。
還可以使用矩陣分解算法等進行優化。