已知三维空间中的一堆点,拟合平面平面的方程为
ax+by+cz=d,为了容易得到平面到原点距离,需要使
a2+b2+c2=1。
首先计算这些点
(xi,yi,zi)的平均坐标
(xˉ,yˉ,zˉ),显然,有
axˉ+byˉ+czˉ=d
与平面方程相减,并写为矩阵形式,得到
⎣⎢⎢⎢⎢⎡x1−xˉx2−xˉx3−xˉxn−xˉy1−yˉy2−yˉy3−yˉ...yn−yˉz1−zˉz2−zˉz3−zˉzn−zˉ⎦⎥⎥⎥⎥⎤⎣⎡abc⎦⎤=0
另左边矩阵为
A,右边矩阵为
X,则拟合的目标函数为
min∣∣AX∣∣,并具有约束
∣X∣∣=1。
对
A做奇异值分解
A=UDVT
其中,
D是对角矩阵,
U和
V均为酉矩阵。
所以
∣∣AX∣∣=∣∣UDVTX∣∣=∣∣DVTX∣∣(酉矩阵性质),其中
VTX为列矩阵,并且
∣VTX∣∣=∣∣X∣∣=1。
因为
D的对角元素为奇异值,最后一个对角元素为最小奇异值,当且仅当
VTX=⎣⎡001⎦⎤
时,
∣∣AX∣∣ 取到最小值,此时
X=⎣⎡abc⎦⎤=V⎣⎡001⎦⎤
而
(a,b,c)即为平面
ax+by+cz=d的法向量。
该方法的代码实现可以参考笔者以前的博客
https://blog.csdn.net/iamqianrenzhan/article/details/103463932。