﻿功能:空间直线拟合

[n,a]=LineFit2(x,y,z)

x:空间x方向坐标的矩阵变量
y:空间y方向坐标的矩阵变量
z:空间z方向坐标的矩阵变量

n:返回1*3的直线方向向量矩阵
a:返回1*3的直线通过的一个点矩阵

原理:

1、设 n = [ m  p  q ] , a = [ A  B  C ]

2、空间直线点向式参数方程为
$$
\dfrac{x - A}{m} = \dfrac{y - B}{p} =\dfrac{z - C}{q}
$$
3、在方向向量中,总存在一个参数不为0,这里不妨设q≠0，由于方向向量的参数同时放大或者缩小均不影响,则设q=1,因为q≠0，则原直线必经过z=0的点，所以这里设C=0，那么将p、C值带入点向式参数方程可以得到
$$
x=mz + A
\\
y=pz + B
$$
4、因为数据x、y、z已知,则根据直线拟合的算法可直接对上面两个直线方程拟合出最佳系数 m、p、A、B，则最后就求解完毕。


5、因为在方向向量[ m  p  q ]中可能存在某个参数为0的情况，这时程序根据已知x、y、z数据的最大最小值确定出选择哪一个方向的变量值作为直线拟合当中的自变量。

例子:

z=1:10;
x=2+0.35*z;
y=4.5+0.5*z;
//通过上面代码产生已知数据组(x,y,z)，而实际应该根据实验所得

[n,a]=LineFit2(x,y,z)//回车得到如下结果,即x、y、z数据满足的最佳直线的方向向量为( 0.34999999999999, 0.5, 1 ) 且直线通过点(2, 4.5, 0)
n =
[ 0.34999999999999    0.50000000000000    1.00000000000000 ]
a =
[ 2.00000000000000    4.50000000000000    0.00000000000000 ]
