相机标定

针对第一章相机标定中的公式的推导详见我的另一篇博客:相机标定

Kalman Filter

推导详见博客:卡尔曼滤波核心公式推导

圆柱包围盒碰撞检测:

空间中直线间的距离

考虑空间中,ABABCDCD 是两条异面直线,A、B、C、D四个点的坐标分为 (XA,YA,ZA)(XB,YB,ZB)(XC,YC,ZC)(XD,YD,ZD)(X_A,Y_A,Z_A) \quad (X_B,Y_B,Z_B) \quad (X_C,Y_C,Z_C) \quad (X_D,Y_D,Z_D)。记 AB\overrightarrow{AB} 的方向向量为 S1\overrightarrow{S_1}CD\overrightarrow{CD} 的方向向量为 S2\overrightarrow{S_2}

S1=(XBXA,YBYA,ZBZA)\overrightarrow{S_1} = (X_B - X_A, Y_B - Y_A, Z_B - Z_A)

S2=(XDXC,YDYC,ZDZC)\overrightarrow{S_2} = (X_D - X_C, Y_D - Y_C, Z_D - Z_C)

S3=S1×S2=(M,N,P)=((YBYA)(ZDZC)(ZBZA)(YDYC),(ZBZA)(XDXC)(XBXA)(ZDZC),(XBXA)(YDYC)(YBYA)(XDXC))\begin{aligned} \overrightarrow{S_3} = \overrightarrow{S_1} \times \overrightarrow{S_2} & = (M, N, P) \\= \Big( &(Y_B-Y_A)\cdot(Z_D-Z_C)-(Z_B-Z_A)\cdot(Y_D-Y_C), \\ & (Z_B-Z_A)\cdot(X_D-X_C)-(X_B-X_A)\cdot(Z_D-Z_C),\\ & (X_B-X_A)\cdot(Y_D-Y_C)-(Y_B-Y_A)\cdot(X_D-X_C)\Big) \end{aligned}

由平面的点法式方程(点 AA 和方向向量 S3\overrightarrow{S_3})可得一个过直线 ABAB 且平行CDCD的平面 π\pi

π\pi的方程为:M(xXA)+N(yYB)+P(zZB)=0M(x-X_A)+N(y-Y_B)+P(z-Z_B) = 0,将其化为一般形式 Mx+Ny+Pz+Q=0Mx + Ny + Pz + Q= 0 可得,

Q=[M,N,P][XAYAZA]Q = - \begin{bmatrix} M,N,P \end{bmatrix} \cdot \begin{bmatrix} X_A \\ Y_A \\ Z_A \end{bmatrix}

于是π\pi的方程写成矩阵形式:

[M,N,P][xXAyYAzZA]=0\begin{bmatrix} M,N,P \end{bmatrix} \cdot \begin{bmatrix} x-X_A \\ y-Y_A \\ z-Z_A \end{bmatrix} = 0

则点 C(XC,YC,ZC)C(X_C, Y_C, Z_C) 或点 D(XD,YD,ZD)D(X_D, Y_D, Z_D)π\pi 的距离即为异面直线 ABABCDCD 间的距离

d=MXC+NYC+PZC+QM2+N2+P2=(S1×S2)(AC)S1×S2=[S1,S2,AC]S1×S2\begin{aligned} d &= \frac{|MX_C + NY_C + PZ_C + Q|}{\sqrt{M^2 + N^2 + P^2}}\\ & = \frac{(\overrightarrow{S_1} \times \overrightarrow{S_2})\cdot(\overrightarrow{AC})}{|\overrightarrow{S_1} \times \overrightarrow{S_2}|}\\ & = \frac{[\overrightarrow{S_1} , \overrightarrow{S_2},\overrightarrow{AC}]}{|\overrightarrow{S_1} \times \overrightarrow{S_2}|} \end{aligned}

将具体坐标带入上式即得论文中公式(4-5)

两个线段共面时候的距离

平面上两条线段之间的最短距离定义:

两线段 ABABCDCD 用其端点 (A,B)(A,B)(C,D)(C,D) 表示

ABAB, CDCD 上距离最近的两点之间的距离d(A,B)d(A,B),分为三种情况讨论。

  1. 若两线段有交点,距离d为0

  2. 计算点A和点B到CD线段所在直线的距离,记为l1l_1l2l_2 ;计算点C和点D到AB线段所在直线的距离,记为l3l_3l4l_4

    d(A,l2)d(A,l_2), d(B,l2)d(B,l_2), d(C,l3)d(C,l_3)d(D,l4)d(D,l_4)

    选择距离最小,且垂足落在对方线段内的,作为 d(A,B)d(A,B)

  3. 若四个垂足都落在对方线段外,计算四个端点两两之间的距离,取最小值作为 d(A,B)d(A,B)