已知三维空间中的一堆点,拟合平面平面的方程为 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。