Matlab 二维平面多直线共点拟合(一)

在二维平面内,已知共点的多条线基本可以通过解析几何的方法将点求出。但是在计算机中,由于浮点数等计算误差,导致多条线中相交的点不在同一位置。另外,在现实情况中,测距、测坐标等传感器所带来的误差,将多条线本应共点的位置出现偏差,给数据融合带来麻烦。此篇通过利用matlab中拟合及优化的方法,来将本应共点的多条线优化出来。若有不对及可以改进的地方,请大家多多指正。


欧几里得空间中二维平面两直线交点

首先,利用高中知识,我们来定义:

欧几里得空间中,二维平面笛卡尔点坐标x=(x_p,y_p)^{T};线的斜截式方程:l_i:y=k_ix+b_i

在求线交点时,最少应该有两条线存在,也就是i\geq 2。所以我们求交点时就可以联立方程组:

\left\{\begin{matrix} y=k_1x+b1\\ y=k_2x+b2 \end{matrix}\right. \Rightarrow x=(-\frac{b_2-b_1}{k_2-k_1},-\frac{b_2k_1-b_1k_2}{k_2-k_1}) 

然而,这个结果对于计算机来说,看起来不太优雅。所以我们就利用大学代数几何知识建立方程:

Ax=b\Rightarrow x=A^{-1}b

\begin{bmatrix} -k_1 &1 \\ -k_2&1 \end{bmatrix}\binom{x_p}{y_p}=\binom{b_1}{b_2}\Rightarrow \binom{x_p}{y_p}=\begin{bmatrix} -k_1 &1 \\ -k_2&1 \end{bmatrix}^{-1}\binom{b_1}{b_2}

计算出结果是一样的。

此时,对于以上方程组的解,也就是两线交点,分成了三种情况:1. 无解;2. 唯一解;3. 以及无数解。

从而对应着两条线的三种情况:1. 两直线平行;2. 两直线相交;3. 和两直线重合。

反映在斜截式方程里就是:1. k_1=k_2, b_1\neq b_2;2.  k_1\neq k_2, b_1\neq b_2;3. k_1=k_2, b_1= b_2

最后反映在矩阵中就是:1. 增广矩阵的秩大于系数矩阵的秩r(\begin{bmatrix} A |b \end{bmatrix})>r(A);2.增广矩阵的秩等于系数矩阵的秩,且满秩r(\begin{bmatrix} A |b \end{bmatrix})=r(A)=n,n为系数矩阵A的行数;3. 增广矩阵的秩等于系数矩阵的秩,但不满秩r(\begin{bmatrix} A |b \end{bmatrix})=r(A)<n

也可以说,当\begin{vmatrix} A \end{vmatrix}\neq0时,两直线有交点;当\begin{vmatrix} A \end{vmatrix}=0时,没有交点,或是两直线重合。此条件可以判断两直线是否有交点。

我们用matlab画出这三种情况:

1. 两平行直线\left\{\begin{matrix} y=-x+1\\ y=-x+2 \end{matrix}\right.;2. 两相交直线\left\{\begin{matrix} y=3x-2\\ y=-2x+3 \end{matrix}\right.,交点坐标x=(1,1)^{T};3. 两重合直线\left\{\begin{matrix} y=-x+1\\ y=-x+1 \end{matrix}\right.

在欧式二维空间中,平行线不会有交点,则会有无解的情况出现,在运算中就还要多一步进行判断。下面我们利用在射影空间的齐次坐标来进行运算。


欧几里得二维空间在射影空间中两直线的交点

在射影空间中,我们饮用了齐次坐标:

齐次点坐标x\equiv (x_1,x_2,x_3)

线的一般式方程Ax+By+C=0,对应于齐次点坐标的线方程为l_1x_1+l_2x_2+l_3x_3=0,齐次线坐标为l\equiv [l_1,l_2,l_3]

而我们此篇研究的是欧几里得二维空间,所以在我们在运算结束后,将齐次点坐标归一化,得到非齐次点坐标。

利用射影空间,两条平行线的交点,也就是解不会作为无解来定义,可以被认为是无限远点,作为一个解来运算。这样方便了我们的判断和运算。

在射影空间中,点在直线上被定义为l^{T}x=x^{T}l=0;通过两点直线被定义为l\equiv x_1\times x_2;两直线交点被定义为x\equiv l_1\times l_2

还是以上三对直线,其各自齐次坐标为

1. l _1\equiv [1,1,-1];l _2\equiv [1,1,-2],交点为x=(1,1,0)^{T},代表无穷远点。归一化为x_n=(\frac{1}{0},\frac{1}{0},1)^{T},代表在欧式二维平面上相交于无穷点,也就是平行;

2. l _1\equiv [3,-1,-2];l _2\equiv [2,1,-3],交点为x=(5,5,5)^{T}。归一化为x_n=(1,1,1)^{T}

3. l _1\equiv [1,1,-1];l _2\equiv [-1,-1,1],交点为x=(0,0,0)^{T},代表在射影空间中,两条射线相交于射影中心,从而说明它们是同一条直线。

若从另一个角度分析,也可以将线的齐次坐标升维致至空间平面方程,通过平面之间的交点来求线的交点。

射影空间中线的齐次坐标在欧氏空间中表示过空间原点面的法向量。此空间平面和归一化平面相交所构成的线,就是在欧氏空间二维平面的直线。所以两条二维平面直线相交,也可以认为是空间中两个平面同时相交于归一化平面。可列方程:

\left\{\begin{matrix} l_1_1x+l_1_2y+l_1_3z=0\\ l_2_1x+l_2_2y+l_2_3z=0 \\ z=1 \end{matrix}\right.\Rightarrow \begin{bmatrix} l_1_1& l_1_2&l_1_3 \\ l_2_1& l_2_2 &l_2_3 \\ 0&0 &1 \end{bmatrix}\begin{bmatrix} x\\y \\ z \end{bmatrix}=\begin{bmatrix} 0\\0 \\ 1 \end{bmatrix}

从上面的方程式看,和上一部分的方程式是一样的。


由此可见在二维平面上求两直线交点可以用到欧氏几何解析法以及射影空间的解析法。然而对于计算机编程者来说,利用射影空间的齐次坐标来计算是一个好的选择。特别地,在后面部分,多线相交求交点时,齐次坐标求解交点将是很好的工具。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值