A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0
已知平面 Π \Pi Π上的一个点 M 0 = ( x 0 , y 0 , z 0 ) M_0=(x_0,y_0,z_0) M0=(x0,y0,z0)和它的一个法线向量 n ⃗ = ( A , B , C ) \vec{n}=(A,B,C) n=(A,B,C),则可以唯一确定该面的平面方程 A ( x − x 0 ) + B ( y − y 0 ) + C ( z − z 0 ) = 0 A(x-x_0)+B(y-y_0)+C(z-z_0)=0 A(x−x0)+B(y−y0)+C(z−z0)=0,推导过程如下:
设 M = ( x , y , z ) M=(x,y,z) M=(x,y,z)是平面 Π \Pi Π上任一点,则向量 M M 0 → \overrightarrow{MM_0} MM0和法向量一定垂直,即内积为0:
M M 0 → ⋅ n ⃗ = 0 \overrightarrow{MM_0} \cdot \vec{n}=0 MM0⋅n=0
即:
( x − x 0 , y − y 0 , z − z 0 ) ⋅ ( A , B , C ) = 0 A ( x − x 0 ) + B ( y − y 0 ) + C ( z − z 0 ) = 0 \begin{align} (x-x_0,\, y-y_0,\,z-z_0) \cdot (A,B,C)&=0 \notag\\ A(x-x_0)+B(y-y_0)+C(z-z_0)&=0\notag \end{align} (x−x0,y−y0,z−z0)⋅(A,B,C)A(x−x0)+B(y−y0)+C(z−z0)=0=0
设平面方程为 A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0,任取满足该方程的一点 M 0 = ( x 0 , y 0 , z 0 ) M_0=(x_0,y_0,z_0) M0=(x0,y0,z0),则有 A x 0 + B y 0 + C 0 = 0 Ax_0+By_0+C_0=0 Ax0+By0+C0=0,两式相减为:
A ( x − x 0 ) + B ( y − y 0 ) + C ( z − z 0 ) = 0 A(x-x_0)+B(y-y_0)+C(z-z_0)=0 A(x−x0)+B(y−y0)+C(z−z0)=0
即:
M M 0 → ⊥ ( A , B , C ) \overrightarrow{MM_0}\bot(A,B,C) MM0⊥(A,B,C)
由于 M 0 M_0 M0是平面上任意一点,因此永远有向量 ( A , B , C ) (A,B,C) (A,B,C)垂直于 M M 0 → \overrightarrow{MM_0} MM0,即向量 ( A , B , C ) (A,B,C) (A,B,C)为该平面的一个法向量。
已知平面方程,则法向量为平面方程的系数。
数学篇22-平面方程(点法式方程与一般方程一定要掌握)
搬运——证明线性空间中,平面方程的系数就是平面的法向量
求解多元函数求极值的问题,可用拉格朗日乘数法,步骤如下:
(1)构造拉格朗日函数;
(2)拉格朗日函数分别对每个变量及 λ \lambda λ求偏导,并令它们都等于0,构造出一个方程组;
(3)求解方程组上述方程组,即可解得疑似极值点。
多元函数条件极值的求法 拉格朗日乘数法_Norstc的博客-CSDN博客
法向量的计算近似于表面相切面法线的问题,因此该问题就是一个最小二乘法平面拟合的问题。平面的一般方程为:
A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0
将多元系数进行归一化为:
A A 2 + B 2 + C 2 x + B A 2 + B 2 + C 2 y + C A 2 + B 2 + C 2 z + D A 2 + B 2 + C 2 = 0 \frac{A}{A^2+B^2+C^2}x+\frac{B}{A^2+B^2+C^2}y+\frac{C}{A^2+B^2+C^2}z+\frac{D}{A^2+B^2+C^2}=0 A2+B2+C2Ax+A2+B2+C2By+A2+B2+C2Cz+A2+B2+C2D=0
即:
a x + b y + c z + d = 0 ax+by+cz+d=0 ax+by+cz+d=0
其中, ( A , B , C ) (A,B,C) (A,B,C)是该平面的一个法向量, ( a , b , c ) (a,b,c) (a,b,c)是归一化的法向量。
因此,计算法向量的问题就转化为多元一次方程参数估计的问题。
(1)构造目标函数
保证参数估计结果尽可能地让更多的点在拟合的平面上或距拟合的平面距离最小,因此目标函数为:
d i = ∣ a x i + b y i + c z i + d ∣ a 2 + b 2 + c 2 = ∣ a x i + b y i + c z i + d ∣ d_i=\frac{|ax_i+by_i+cz_i+d|}{\sqrt{a^2+b^2+c^2}}=|ax_i+by_i+cz_i+d| di=a2+b2+c2∣axi+byi+czi+d∣=∣axi+byi+czi+d∣
L = ∑ i = 1 N d i 2 = ∑ i = 1 N ( a x i + b y i + c z i + d ) 2 → m i n L=\sum_{i=1}^{N}d_i^2=\sum_{i=1}^{N}(ax_i+by_i+cz_i+d)^2\rightarrow min L=i=1∑Ndi2=i=1∑N(axi+byi+czi+d)2→min
其中 ( a , b , c ) (a,b,c) (a,b,c)是归一化的法向量,即 a 2 + b 2 + c 2 = 1 a^2+b^2+c^2=1 a2+b2+c2=1,则问题转化为多元一次方程求条件极值的问题,使用拉格朗日乘数法:
(2)构造拉格朗日函数:
f = L + λ ( a 2 + b 2 + c 2 − 1 ) = ∑ i = 1 N d i 2 + λ ( a 2 + b 2 + c 2 − 1 ) = ∑ i = 1 N ( a x i + b y i + c z i + d ) 2 + λ ( a 2 + b 2 + c 2 − 1 ) \begin{align} f&=L+\lambda(a^2+b^2+c^2-1)\notag\\ &=\sum_{i=1}^{N}d_i^2+\lambda(a^2+b^2+c^2-1)\notag\\ &=\sum_{i=1}^{N}(ax_i+by_i+cz_i+d)^2+\lambda(a^2+b^2+c^2-1)\notag \end{align} f=L+λ(a2+b2+c2−1)=i=1∑Ndi2+λ(a2+b2+c2−1)=i=1∑N(axi+byi+czi+d)2+λ(a2+b2+c2−1)
(3)目标函数对参数 d d d求偏导,并令其等于0:
∂ L ∂ d = 2 ∑ i = 1 N ( a x i + b y i + c z i + d ) = 0 \frac{\partial L}{\partial d}= 2\sum_{i=1}^{N}(ax_i+by_i+cz_i+d)=0 ∂d∂L=2i=1∑N(axi+byi+czi+d)=0
即:
d = − 1 N ( a ∑ i x i + b ∑ i y i + c ∑ i z i ) = − ∑ i = 1 N x i N a − ∑ i = 1 N y i N b − ∑ i = 1 N z i N c \begin{align} d&=-\frac{1}{N}(a\sum_i{x_i}+b\sum_i{y_i}+c\sum_i{z_i})\\ &=-\frac{\sum_{i=1}^{N}x_i}{N}a-\frac{\sum_{i=1}^{N}y_i}{N}b-\frac{\sum_{i=1}^{N}z_i}{N}c\notag \end{align} d=−N1(ai∑xi+bi∑yi+ci∑zi)=−N∑i=1Nxia−N∑i=1Nyib−N∑i=1Nzic
将 d d d分别带入点到面的距离公式、拉格朗日函数有:
d i = ∣ a x i + b y i + c z i + d ∣ = ∣ a x i + b y i + c z i − ∑ i = 1 N x i N a − ∑ i = 1 N y i N b − ∑ i = 1 N z i N c ∣ = ∣ a ( x i − x ˉ ) + b ( y − y ˉ ) + c ( z − z ˉ ) ∣ \begin{align} d_i&=|ax_i+by_i+cz_i+d|\notag\\ &=|ax_i+by_i+cz_i-\frac{\sum_{i=1}^{N}x_i}{N}a-\frac{\sum_{i=1}^{N}y_i}{N}b-\frac{\sum_{i=1}^{N}z_i}{N}c|\notag\\ &=|a(x_i-\bar{x})+b(y-\bar{y})+c(z-\bar{z})|\notag \end{align} di=∣axi+byi+czi+d∣=∣axi+byi+czi−N∑i=1Nxia−N∑i=1Nyib−N∑i=1Nzic∣=∣a(xi−xˉ)+b(y−yˉ)+c(z−zˉ)∣
f = ∑ i = 1 N ( a x i + b y i + c z i − ∑ i = 1 N x i N a − ∑ i = 1 N y i N b − ∑ i = 1 N z i N c ) 2 + λ ( a 2 + b 2 + c 2 − 1 ) = ∑ i = 1 N ( a ( x i − x ˉ ) + b ( y − y ˉ ) + c ( z − z ˉ ) ) 2 + λ ( a 2 + b 2 + c 2 − 1 ) \begin{align} f&=\sum_{i=1}^{N}(ax_i+by_i+cz_i-\frac{\sum_{i=1}^{N}x_i}{N}a-\frac{\sum_{i=1}^{N}y_i}{N}b-\frac{\sum_{i=1}^{N}z_i}{N}c)^2+ \lambda(a^2+b^2+c^2-1)\notag\\ &=\sum_{i=1}^{N}(a(x_i-\bar{x})+b(y-\bar{y})+c(z-\bar{z}))^2+ \lambda(a^2+b^2+c^2-1)\notag \end{align} f=i=1∑N(axi+byi+czi−N∑i=1Nxia−N∑i=1Nyib−N∑i=1Nzic)2+λ(a2+b2+c2−1)=i=1∑N(a(xi−xˉ)+b(y−yˉ)+c(z−zˉ))2+λ(a2+b2+c2−1)
拉格朗日函数对各参数求偏导,并令其均为0:
{ ∂ f ∂ a = 2 ∑ i = 1 N ( x i − x ˉ ) ( a ( x i − x ˉ ) + b ( y i − y ˉ ) + c ( z i − z ˉ ) ) + 2 λ a = 0 ∂ f ∂ b = 2 ∑ i = 1 N ( y i − y ˉ ) ( a ( x i − x ˉ ) + b ( y i − y ˉ ) + c ( z i − z ˉ ) ) + 2 λ b = 0 ∂ f ∂ c = 2 ∑ i = 1 N ( z i − z ˉ ) ( a ( x i − x ˉ ) + b ( y i − y ˉ ) + c ( z i − z ˉ ) ) + 2 λ c = 0 \begin{cases} \begin{align} &\frac{\partial f}{\partial a}&=2\sum_{i=1}^{N}(x_i-\bar{x})(a(x_i-\bar{x})+b(y_i-\bar{y})+c(z_i-\bar{z}))+2\lambda a&=0\quad\notag\\ &\frac{\partial f}{\partial b}&=2\sum_{i=1}^{N}(y_i-\bar{y})(a(x_i-\bar{x})+b(y_i-\bar{y})+c(z_i-\bar{z}))+2\lambda b&=0\quad\notag\\ &\frac{\partial f}{\partial c}&=2\sum_{i=1}^{N}(z_i-\bar{z})(a(x_i-\bar{x})+b(y_i-\bar{y})+c(z_i-\bar{z}))+2\lambda c&=0\quad\notag \end{align} \end{cases} ⎩ ⎨ ⎧∂a∂f∂b∂f∂c∂f=2i=1∑N(xi−xˉ)(a(xi−xˉ)+b(yi−yˉ)+c(zi−zˉ))+2λa=2i=1∑N(yi−yˉ)(a(xi−xˉ)+b(yi−yˉ)+c(zi−zˉ))+2λb=2i=1∑N(zi−zˉ)(a(xi−xˉ)+b(yi−yˉ)+c(zi−zˉ))+2λc=0=0=0
即:
{ ∑ i = 1 N a ( x i − x ˉ ) ( x i − x ˉ ) + b ( y i − y ˉ ) ( x i − x ˉ ) + c ( z i − z ˉ ) ( x i − x ˉ ) + λ a = 0 ∑ i = 1 N a ( x i − x ˉ ) ( y i − y ˉ ) + b ( y i − y ˉ ) ( y i − y ˉ ) + c ( z i − z ˉ ) ( y i − y ˉ ) + λ b = 0 ∑ i = 1 N a ( x i − x ˉ ) ( z i − z ˉ ) + b ( y i − y ˉ ) ( z i − z ˉ ) + c ( z i − z ˉ ) ( z i − z ˉ ) + λ c = 0 \begin{cases} \begin{align} &\sum_{i=1}^{N}a(x_i-\bar{x})(x_i-\bar{x})+b(y_i-\bar{y})(x_i-\bar{x})+c(z_i-\bar{z})(x_i-\bar{x})+\lambda a&=0\quad\notag\\ &\sum_{i=1}^{N}a(x_i-\bar{x})(y_i-\bar{y})+b(y_i-\bar{y})(y_i-\bar{y})+c(z_i-\bar{z})(y_i-\bar{y})+\lambda b&=0\quad\notag\\ &\sum_{i=1}^{N}a(x_i-\bar{x})(z_i-\bar{z})+b(y_i-\bar{y})(z_i-\bar{z})+c(z_i-\bar{z})(z_i-\bar{z})+\lambda c&=0\quad\notag\\ \end{align} \end{cases} ⎩ ⎨ ⎧i=1∑Na(xi−xˉ)(xi−xˉ)+b(yi−yˉ)(xi−xˉ)+c(zi−zˉ)(xi−xˉ)+λai=1∑Na(xi−xˉ)(yi−yˉ)+b(yi−yˉ)(yi−yˉ)+c(zi−zˉ)(yi−yˉ)+λbi=1∑Na(xi−xˉ)(zi−zˉ)+b(yi−yˉ)(zi−zˉ)+c(zi−zˉ)(zi−zˉ)+λc=0=0=0
可用矩阵表示为:
( ∑ ( x i − x ˉ ) ( x i − x ˉ ) ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) ( z i − z ˉ ) ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( y i − y ˉ ) ( y i − y ˉ ) ∑ ( y i − y ˉ ) ( z i − z ˉ ) ∑ ( x i − x ˉ ) ( z i − z ˉ ) ∑ ( y i − y ˉ ) ( z i − z ˉ ) ∑ ( z i − z ˉ ) ( z i − z ˉ ) ) ( a b c ) = − λ ( a b c ) \begin{pmatrix} \sum{(x_i-\bar{x})(x_i-\bar{x})}&\sum{(x_i-\bar{x})(y_i-\bar{y})}&\sum{(x_i-\bar{x})(z_i-\bar{z})}\\ \sum{(x_i-\bar{x})(y_i-\bar{y})}&\sum{(y_i-\bar{y})(y_i-\bar{y})}&\sum{(y_i-\bar{y})(z_i-\bar{z})}\\ \sum{(x_i-\bar{x})(z_i-\bar{z})}&\sum{(y_i-\bar{y})(z_i-\bar{z})}&\sum{(z_i-\bar{z})(z_i-\bar{z})} \end{pmatrix} \begin{pmatrix} a\\b\\c \end{pmatrix} = -\lambda\begin{pmatrix} a\\b\\c \end{pmatrix} ∑(xi−xˉ)(xi−xˉ)∑(xi−xˉ)(yi−yˉ)∑(xi−xˉ)(zi−zˉ)∑(xi−xˉ)(yi−yˉ)∑(yi−yˉ)(yi−yˉ)∑(yi−yˉ)(zi−zˉ)∑(xi−xˉ)(zi−zˉ)∑(yi−yˉ)(zi−zˉ)∑(zi−zˉ)(zi−zˉ) abc =−λ abc
即:
A ′ x ′ = λ ′ x ′ A'x'=\lambda'x' A′x′=λ′x′
其中,矩阵 A ′ A' A′是3×3的协方差矩阵, x ′ = ( a b c ) T x'=\begin{pmatrix}a&b&c\end{pmatrix}^T x′=(abc)T为该矩阵的一个特征向量,也就是说法向量是该矩阵的一个特征向量。
由 a 2 + b 2 + c 2 = 1 a^2+b^2+c^2=1 a2+b2+c2=1可知 x ′ T x ′ = 1 x'^Tx'=1 x′Tx′=1,即内积为1, x ′ ⋅ x ′ = 1 x'\cdot x'=1 x′⋅x′=1,则有:
A ′ × x ′ = λ ′ x ′ ⇒ A ′ × x ′ ⋅ x ′ = λ ′ x ′ ⋅ x ′ ⇒ λ ′ = A ′ × x ′ ⋅ x ′ A'\times x'=\lambda'x'\,\Rightarrow\,A'\times x'\cdot x'=\lambda'x'\cdot x'\,\Rightarrow\,\lambda'=A'\times x'\cdot x' A′×x′=λ′x′⇒A′×x′⋅x′=λ′x′⋅x′⇒λ′=A′×x′⋅x′
其中符号 “×” 表示矩阵相乘,符号 "·"表示计算向量内积。
λ ′ = ( ∑ ( x i − x ˉ ) ( x i − x ˉ ) ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) ( z i − z ˉ ) ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( y i − y ˉ ) ( y i − y ˉ ) ∑ ( y i − y ˉ ) ( z i − z ˉ ) ∑ ( x i − x ˉ ) ( z i − z ˉ ) ∑ ( y i − y ˉ ) ( z i − z ˉ ) ∑ ( z i − z ˉ ) ( z i − z ˉ ) ) × ( a b c ) ⋅ ( a b c ) = ( a ∑ ( x i − x ˉ ) ( x i − x ˉ ) + b ∑ ( x i − x ˉ ) ( y i − y ˉ ) + c ∑ ( x i − x ˉ ) ( z i − z ˉ ) a ∑ ( x i − x ˉ ) ( y i − y ˉ ) + b ∑ ( y i − y ˉ ) ( y i − y ˉ ) + c ∑ ( y i − y ˉ ) ( z i − z ˉ ) a ∑ ( x i − x ˉ ) ( z i − z ˉ ) + b ∑ ( y i − y ˉ ) ( z i − z ˉ ) + c ∑ ( z i − z ˉ ) ( z i − z ˉ ) ) ⋅ ( a b c ) = ∑ i = 1 N ( a ( x i − x ˉ ) + b ( y i − y ˉ ) + c ( z i − z ˉ ) ) 2 = ∑ i = 1 N d i 2 \begin{align} \lambda'&=\begin{pmatrix} \sum{(x_i-\bar{x})(x_i-\bar{x})}&\sum{(x_i-\bar{x})(y_i-\bar{y})}&\sum{(x_i-\bar{x})(z_i-\bar{z})}\\ \sum{(x_i-\bar{x})(y_i-\bar{y})}&\sum{(y_i-\bar{y})(y_i-\bar{y})}&\sum{(y_i-\bar{y})(z_i-\bar{z})}\\ \sum{(x_i-\bar{x})(z_i-\bar{z})}&\sum{(y_i-\bar{y})(z_i-\bar{z})}&\sum{(z_i-\bar{z})(z_i-\bar{z})} \end{pmatrix} \times \begin{pmatrix} a\\b\\c \end{pmatrix} \cdot \begin{pmatrix} a\\b\\c \end{pmatrix}\notag\\ &= \begin{pmatrix} a\sum{(x_i-\bar{x})(x_i-\bar{x})} +b\sum{(x_i-\bar{x})(y_i-\bar{y})}+c\sum{(x_i-\bar{x})(z_i-\bar{z})}\\ a\sum{(x_i-\bar{x})(y_i-\bar{y})}+b\sum{(y_i-\bar{y})(y_i-\bar{y})}+c\sum{(y_i-\bar{y})(z_i-\bar{z})}\\ a\sum{(x_i-\bar{x})(z_i-\bar{z})}+b\sum{(y_i-\bar{y})(z_i-\bar{z})}+c\sum{(z_i-\bar{z})(z_i-\bar{z})} \end{pmatrix} \cdot \begin{pmatrix} a\\b\\c \end{pmatrix}\notag\\ &=\sum_{i=1}^{N}{(a(x_i-\bar{x})+b(y_i-\bar{y})+c(z_i-\bar{z}))^2}\notag\\ &=\sum_{i=1}^{N}d_i^2\notag \end{align} λ′= ∑(xi−xˉ)(xi−xˉ)∑(xi−xˉ)(yi−yˉ)∑(xi−xˉ)(zi−zˉ)∑(xi−xˉ)(yi−yˉ)∑(yi−yˉ)(yi−yˉ)∑(yi−yˉ)(zi−zˉ)∑(xi−xˉ)(zi−zˉ)∑(yi−yˉ)(zi−zˉ)∑(zi−zˉ)(zi−zˉ) × abc ⋅ abc = a∑(xi−xˉ)(xi−xˉ)+b∑(xi−xˉ)(yi−yˉ)+c∑(xi−xˉ)(zi−zˉ)a∑(xi−xˉ)(yi−yˉ)+b∑(yi−yˉ)(yi−yˉ)+c∑(yi−yˉ)(zi−zˉ)a∑(xi−xˉ)(zi−zˉ)+b∑(yi−yˉ)(zi−zˉ)+c∑(zi−zˉ)(zi−zˉ) ⋅ abc =i=1∑N(a(xi−xˉ)+b(yi−yˉ)+c(zi−zˉ))2=i=1∑Ndi2
因此,要想 L = ∑ i = 1 N d i 2 → m i n L=\sum_{i=1}^{N}d_i^2\rightarrow min L=∑i=1Ndi2→min,必须有 λ ′ → m i n \lambda'\rightarrow min λ′→min,则法向量就是协方差矩阵的最小特征值对应的特征向量。PCA找的是最大特征值对应的特征向量,因为它要的是最重要的方向,而法向量是垂直于原始数据的方向,所以是最不重要的方向,因此是最小特征值对应的特征向量。(引申为最小奇异值对应的奇异向量,因为奇异值是特征值的平方根!!!)
点云法向量估计原理及应用PCL
将三个点坐标 P 1 = ( x 1 , y 1 , z 1 ) , P 2 = ( x 2 , y 2 , z 2 ) , P 3 = ( x 3 , y 3 , z 3 ) P_1=(x_1, y_1,z_1),\,P_2=(x_2,y_2,z_2),\,P_3=(x_3,y_3,z_3) P1=(x1,y1,z1),P2=(x2,y2,z2),P3=(x3,y3,z3)分别带入点法式平面方程:
{ A ( x − x 1 ) + B ( y − y 1 ) + C ( z − z 1 ) = 0 A ( x − x 2 ) + B ( y − y 2 ) + C ( z − z 2 ) = 0 A ( x − x 3 ) + B ( y − y 3 ) + C ( z − z 3 ) = 0 \begin{cases} &A(x-x_1)+B(y-y_1)+C(z-z_1)&=0\notag\\ &A(x-x_2)+B(y-y_2)+C(z-z_2)&=0\notag\\ &A(x-x_3)+B(y-y_3)+C(z-z_3)&=0\notag\\ \end{cases} ⎩ ⎨ ⎧A(x−x1)+B(y−y1)+C(z−z1)A(x−x2)+B(y−y2)+C(z−z2)A(x−x3)+B(y−y3)+C(z−z3)=0=0=0
利用叉乘性质 “两个向量的叉乘结果为同时垂直于参与叉乘计算的两个向量的一个向量” 可知 P 1 P 2 → \overrightarrow{P_1P_2} P1P2和 P 1 P 3 → \overrightarrow{P_1P_3} P1P3的叉乘结果同时垂直于这两个向量,所以叉乘结果就是平面的法向量,即法向量为:
n ⃗ = P 1 P 2 → × P 1 P 3 → = ( x 1 − x 2 y 1 − y 2 z 1 − z 2 ) × ( x 1 − x 3 y 1 − y 3 z 1 − z 3 ) = ( ( y 1 − y 2 ) ( z 1 − z 3 ) − ( z 1 − z 2 ) ( y 1 − y 3 ) ( z 1 − z 2 ) ( x 1 − x 3 ) − ( x 1 − x 2 ) ( z 1 − z 3 ) ( x 1 − x 2 ) ( y 1 − y 3 ) − ( y 1 − y 2 ) ( x 1 − x 3 ) ) \begin{align} \vec{n}&=\overrightarrow{P_1P_2}\,\times\,\overrightarrow{P_1P_3}\notag\\ &=\left( \begin{matrix} x_1-x_2 \\ y_1-y_2 \\ z_1-z_2 \end{matrix} \right) \times \left( \begin{matrix} x_1-x_3 \\ y_1-y_3 \\ z_1-z_3 \end{matrix} \right) \notag \\ &= \left(\begin{matrix} (y_1-y_2)(z_1-z_3)-(z_1-z_2)(y_1-y_3)\\ (z_1-z_2)(x_1-x_3)-(x_1-x_2)(z_1-z_3)\\ (x_1-x_2)(y_1-y_3)-(y_1-y_2)(x_1-x_3) \end{matrix}\right) \notag \end{align} n=P1P2×P1P3= x1−x2y1−y2z1−z2 × x1−x3y1−y3z1−z3 = (y1−y2)(z1−z3)−(z1−z2)(y1−y3)(z1−z2)(x1−x3)−(x1−x2)(z1−z3)(x1−x2)(y1−y3)−(y1−y2)(x1−x3)
即:
{ A = ( y 1 − y 2 ) ( z 1 − z 3 ) − ( z 1 − z 2 ) ( y 1 − y 3 ) B = ( z 1 − z 2 ) ( x 1 − x 3 ) − ( x 1 − x 2 ) ( z 1 − z 3 ) C = ( x 1 − x 2 ) ( y 1 − y 3 ) − ( y 1 − y 2 ) ( x 1 − x 3 ) \begin{cases} \begin{align} &A = (y_1-y_2)(z_1-z_3)-(z_1-z_2)(y_1-y_3)\notag\\ &B=(z_1-z_2)(x_1-x_3)-(x_1-x_2)(z_1-z_3)\notag\\ &C=(x_1-x_2)(y_1-y_3)-(y_1-y_2)(x_1-x_3)\notag \end{align} \end{cases} ⎩ ⎨ ⎧A=(y1−y2)(z1−z3)−(z1−z2)(y1−y3)B=(z1−z2)(x1−x3)−(x1−x2)(z1−z3)C=(x1−x2)(y1−y3)−(y1−y2)(x1−x3)
可以选择性进行归一化:
{ A ′ = A A 2 + B 2 + C 2 B ′ = B A 2 + B 2 + C 2 C ′ = C A 2 + B 2 + C 2 \begin{cases} \begin{align} &A' = \frac{A}{\sqrt{A^2+B^2+C^2}}\notag\\ &B'=\frac{B}{\sqrt{A^2+B^2+C^2}}\notag\\ &C'=\frac{C}{\sqrt{A^2+B^2+C^2}}\notag \end{align} \end{cases} ⎩ ⎨ ⎧A′=A2+B2+C2AB′=A2+B2+C2BC′=A2+B2+C2C
带入可得点法式平面方程表达式。
向量点乘与叉乘的概念及几何意义
【回归本源】1.3-向量叉乘
拟合平面一定经过离散点的质心。
A = U Σ V − 1 \boldsymbol{A}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V}^{-1} A=UΣV−1,其中当奇异值矩阵中的奇异值按照从大到小排序时,V的最后一列就是协方差A求得的法向量!
3D点云处理:用SVD分解法和最小二乘法拟合平面点云,求解平面方程_svd平面拟合-CSDN博客
SVD 的V 的最后一列是Ax = 0的解_eigen ax=0-CSDN博客
为何SVD分解出来的V最后一列向量为Ax=0的最优解(以orbslam2中求解单应矩阵为例子)
(本文完整的pdf请关注公众号“张张学算法”,并回复“022”获取~)