LingjieLi Gomputer Graphics/Algorithm/Linux/Server/Architecture

有向包围盒(OBB,Oriented Bounding Box)


1. 有向包围盒(OBB)和轴对齐包围盒(AABB)

有向包围盒实际上是相对于轴对齐包围盒来讲的,下面一张示意图表示二维情况下的OBB和AABB

2.从图1可以看出,要想得到有向包围盒,必须知道,这些点的长轴的短轴。

长轴实际上是这些点最大的发展方向,短轴是与短轴正交的方向,是这些点最小发展方向。 用 PCA(主成分分析) 可以得到这些点的轴。

主成分分析,是将一组数据从n维映射到k(K<=n)维正交特征上,这k维特征是正交的

3.PCA过程(以二维数据为例)

如图2,有一些点,现在我们对它进行PCA分析。 这些数据分别用 $P=(x_i,y_i)(i=1…n)$ 表示。 将这些二维数据保存在两个向量里 $X=(x_1,x_2,…,x_n)$ ,$Y=(y_1,y_2,…,y_n)$ 现在,开始用PCA分析这两个维度,步骤如下:

Step1:数据去中心 Step2:求协方差矩阵 Step3:求协方差矩阵的特征值与特征向量 Step4:得到包围盒的长轴和短轴 {l,h}

4.构造有向包围盒

已经得到有向包围盒的两条轴,现在获取包围盒的8个顶点 ${v_1,v_2,…,v_8}$ 和中心 $C$,这样包围盒就可以唯一确定了。 为了简便操作,我们将这些点从目前的 ${O,i,j}$ 坐标轴变换到 ${C,l,h}$ 其中${O,i,j}$为全局坐标,${C.l.h}$为局部坐标。 #####4.1 正交标架转换 #####4.2 得到范围边界及 ${C,l,k}$ 坐标下的包围盒顶点 #####4.3 得到 ${O,i,j}$ 坐标下的包围盒顶点 有向包围盒OBB构造完毕


上一篇 C++ 误区

Comments

Content