文章目录
一、平面方程表示法
1.1 一般方程
A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0
1.2 点法式
已知平面 Π \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
1.3 一般方程的系数构成法向量
设平面方程为
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)为该平面的一个法向量。
1.4 结论
已知平面方程,则法向量为平面方程的系数。
二、拉格朗日乘数法
求解多元函数求极值的问题,可用拉格朗日乘数法,步骤如下:
(1)构造拉格朗日函数;
(2)拉格朗日函数分别对每个变量及 λ \lambda λ求偏导,并令它们都等于0,构造出一个方程组;
(3)求解方程组上述方程组,即可解得疑似极值点。
多元函数条件极值的求法 拉格朗日乘数法_Norstc的博客-CSDN博客
三、法向量计算
3.1 问题背景
法向量的计算近似于表面相切面法线的问题,因此该问题就是一个最小二乘法平面拟合的问题。平面的一般方程为:
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)是归一化的法向量。
因此,计算法向量的问题就转化为多元一次方程参数估计的问题。
3.2 推导过程
3.2.1 证明法向量是一个特征向量
(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为该矩阵的一个特征向量,也就是说法向量是该矩阵的一个特征向量。
3.2.2 证明法向量是最小特征值对应的特征向量
由
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找的是最大特征值对应的特征向量,因为它要的是最重要的方向,而法向量是垂直于原始数据的方向,所以是最不重要的方向,因此是最小特征值对应的特征向量。(引申为最小奇异值对应的奇异向量,因为奇异值是特征值的平方根!!!)
四、已知三点求平面方程表达式
将三个点坐标
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
带入可得点法式平面方程表达式。
五、已知协方差矩阵计算法向量
拟合平面一定经过离散点的质心。
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”获取~)