点云法向量和平面方程

一、平面方程表示法

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(xx0)+B(yy0)+C(zz0)=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} (xx0,yy0,zz0)(A,B,C)A(xx0)+B(yy0)+C(zz0)=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(xx0)+B(yy0)+C(zz0)=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 结论

已知平面方程,则法向量为平面方程的系数。

数学篇22-平面方程(点法式方程与一般方程一定要掌握)

搬运——证明线性空间中,平面方程的系数就是平面的法向量

二、拉格朗日乘数法

求解多元函数求极值的问题,可用拉格朗日乘数法,步骤如下:

(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=1Ndi2=i=1N(axi+byi+czi+d)2min

其中 ( 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+c21)=i=1Ndi2+λ(a2+b2+c21)=i=1N(axi+byi+czi+d)2+λ(a2+b2+c21)
(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 dL=2i=1N(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(aixi+biyi+cizi)=Ni=1NxiaNi=1NyibNi=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+cziNi=1NxiaNi=1NyibNi=1Nzic=a(xixˉ)+b(yyˉ)+c(zzˉ)

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=1N(axi+byi+cziNi=1NxiaNi=1NyibNi=1Nzic)2+λ(a2+b2+c21)=i=1N(a(xixˉ)+b(yyˉ)+c(zzˉ))2+λ(a2+b2+c21)

拉格朗日函数对各参数求偏导,并令其均为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} afbfcf=2i=1N(xixˉ)(a(xixˉ)+b(yiyˉ)+c(zizˉ))+2λa=2i=1N(yiyˉ)(a(xixˉ)+b(yiyˉ)+c(zizˉ))+2λb=2i=1N(zizˉ)(a(xixˉ)+b(yiyˉ)+c(zizˉ))+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=1Na(xixˉ)(xixˉ)+b(yiyˉ)(xixˉ)+c(zizˉ)(xixˉ)+λai=1Na(xixˉ)(yiyˉ)+b(yiyˉ)(yiyˉ)+c(zizˉ)(yiyˉ)+λbi=1Na(xixˉ)(zizˉ)+b(yiyˉ)(zizˉ)+c(zizˉ)(zizˉ)+λ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} (xixˉ)(xixˉ)(xixˉ)(yiyˉ)(xixˉ)(zizˉ)(xixˉ)(yiyˉ)(yiyˉ)(yiyˉ)(yiyˉ)(zizˉ)(xixˉ)(zizˉ)(yiyˉ)(zizˉ)(zizˉ)(zizˉ) abc =λ abc
即:
A ′ x ′ = λ ′ x ′ A'x'=\lambda'x' Ax=λ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 xTx=1,即内积为1, x ′ ⋅ x ′ = 1 x'\cdot x'=1 xx=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=λxA×xx=λxxλ=A×xx
其中符号 “×” 表示矩阵相乘,符号 "·"表示计算向量内积。
λ ′ = ( ∑ ( 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} λ= (xixˉ)(xixˉ)(xixˉ)(yiyˉ)(xixˉ)(zizˉ)(xixˉ)(yiyˉ)(yiyˉ)(yiyˉ)(yiyˉ)(zizˉ)(xixˉ)(zizˉ)(yiyˉ)(zizˉ)(zizˉ)(zizˉ) × abc abc = a(xixˉ)(xixˉ)+b(xixˉ)(yiyˉ)+c(xixˉ)(zizˉ)a(xixˉ)(yiyˉ)+b(yiyˉ)(yiyˉ)+c(yiyˉ)(zizˉ)a(xixˉ)(zizˉ)+b(yiyˉ)(zizˉ)+c(zizˉ)(zizˉ) abc =i=1N(a(xixˉ)+b(yiyˉ)+c(zizˉ))2=i=1Ndi2
因此,要想 L = ∑ i = 1 N d i 2 → m i n L=\sum_{i=1}^{N}d_i^2\rightarrow min L=i=1Ndi2min,必须有 λ ′ → 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(xx1)+B(yy1)+C(zz1)A(xx2)+B(yy2)+C(zz2)A(xx3)+B(yy3)+C(zz3)=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 = x1x2y1y2z1z2 × x1x3y1y3z1z3 = (y1y2)(z1z3)(z1z2)(y1y3)(z1z2)(x1x3)(x1x2)(z1z3)(x1x2)(y1y3)(y1y2)(x1x3)
即:
{ 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=(y1y2)(z1z3)(z1z2)(y1y3)B=(z1z2)(x1x3)(x1x2)(z1z3)C=(x1x2)(y1y3)(y1y2)(x1x3)
可以选择性进行归一化:
{ 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+C2 AB=A2+B2+C2 BC=A2+B2+C2 C
带入可得点法式平面方程表达式。

向量点乘与叉乘的概念及几何意义

【回归本源】1.3-向量叉乘

五、已知协方差矩阵计算法向量

拟合平面一定经过离散点的质心。

A = U Σ V − 1 \boldsymbol{A}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V}^{-1} A=UΣV1,其中当奇异值矩阵中的奇异值按照从大到小排序时,V的最后一列就是协方差A求得的法向量!

3D点云处理:用SVD分解法和最小二乘法拟合平面点云,求解平面方程_svd平面拟合-CSDN博客

SVD 的V 的最后一列是Ax = 0的解_eigen ax=0-CSDN博客

为何SVD分解出来的V最后一列向量为Ax=0的最优解(以orbslam2中求解单应矩阵为例子)

 

(本文完整的pdf请关注公众号“张张学算法”,并回复“022”获取~)

 

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于曲面上的某一点,切平面(tangent plane)是通过该点的曲面切线和曲面线所确定的平面。切平面向量即为曲面在该点处的向量。 在 MATLAB 中,可以通过以下步骤求解切平面向量: 1. 计算曲面在该点处的向量。这个可以通过曲面方程的梯度向量(gradient vector)计算得到。在 MATLAB 中,可以使用 `gradient` 函数计算梯度向量。 2. 计算曲面在该点处的切向量。切向量是曲面在该点处的切线方向的向量,可以通过曲面方程在该点处的偏导数计算得到。在 MATLAB 中,可以使用 `diff` 函数计算偏导数。 3. 利用叉积运算求出切平面向量。在 MATLAB 中,可以使用 `cross` 函数计算两个向量的叉积。 下面是一个 MATLAB 函数,可以根据曲面方程和点的坐标计算切平面向量: ```matlab function n = calculateTangentPlaneNormal(f, x0, y0) % f: 曲面方程 % x0, y0: 点的坐标 % n: 切平面向量 syms x y; z = f(x, y); % 计算曲面在该点处的向量 grad = gradient(z, [x, y]); n = [double(subs(grad(1), [x, y], [x0, y0])); double(subs(grad(2), [x, y], [x0, y0])); double(subs(grad(3), [x, y], [x0, y0]))]; % 计算曲面在该点处的切向量 dx = diff(z, x); dy = diff(z, y); t = [1 0 double(subs(dx, [x, y], [x0, y0]))]; t = cross(t, [0 1 double(subs(dy, [x, y], [x0, y0]))]); % 求出切平面向量 n = cross(t, n); n = n / norm(n); end ``` 其中,`f` 是曲面方程,`x0` 和 `y0` 是点的坐标,`subs` 函数用于替换符号变量的值,`gradient` 函数用于计算梯度向量,`diff` 函数用于计算偏导数,`cross` 函数用于计算两个向量的叉积,`norm` 函数用于计算向量的模长。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Satisfying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值