在二维平面内,已知共点的多条线基本可以通过解析几何的方法将点求出。但是在计算机中,由于浮点数等计算误差,导致多条线中相交的点不在同一位置。另外,在现实情况中,测距、测坐标等传感器所带来的误差,将多条线本应共点的位置出现偏差,给数据融合带来麻烦。此篇通过利用matlab中拟合及优化的方法,来将本应共点的多条线优化出来。若有不对及可以改进的地方,请大家多多指正。
欧几里得空间中二维平面两直线交点
首先,利用高中知识,我们来定义:
欧几里得空间中,二维平面笛卡尔点坐标;线的斜截式方程:
。
在求线交点时,最少应该有两条线存在,也就是。所以我们求交点时就可以联立方程组:
然而,这个结果对于计算机来说,看起来不太优雅。所以我们就利用大学代数几何知识建立方程:
计算出结果是一样的。
此时,对于以上方程组的解,也就是两线交点,分成了三种情况:1. 无解;2. 唯一解;3. 以及无数解。
从而对应着两条线的三种情况:1. 两直线平行;2. 两直线相交;3. 和两直线重合。
反映在斜截式方程里就是:1. ;2.
;3.
。
最后反映在矩阵中就是:1. 增广矩阵的秩大于系数矩阵的秩;2.增广矩阵的秩等于系数矩阵的秩,且满秩
,n为系数矩阵A的行数;3. 增广矩阵的秩等于系数矩阵的秩,但不满秩
。
也可以说,当时,两直线有交点;当
时,没有交点,或是两直线重合。此条件可以判断两直线是否有交点。
我们用matlab画出这三种情况:
1. 两平行直线;2. 两相交直线
,交点坐标
;3. 两重合直线
在欧式二维空间中,平行线不会有交点,则会有无解的情况出现,在运算中就还要多一步进行判断。下面我们利用在射影空间的齐次坐标来进行运算。
欧几里得二维空间在射影空间中两直线的交点
在射影空间中,我们饮用了齐次坐标:
齐次点坐标;
线的一般式方程,对应于齐次点坐标的线方程为
,齐次线坐标为
。
而我们此篇研究的是欧几里得二维空间,所以在我们在运算结束后,将齐次点坐标归一化,得到非齐次点坐标。
利用射影空间,两条平行线的交点,也就是解不会作为无解来定义,可以被认为是无限远点,作为一个解来运算。这样方便了我们的判断和运算。
在射影空间中,点在直线上被定义为;通过两点直线被定义为
;两直线交点被定义为
。
还是以上三对直线,其各自齐次坐标为
1. ,交点为
,代表无穷远点。归一化为
,代表在欧式二维平面上相交于无穷点,也就是平行;
2. ,交点为
。归一化为
;
3. ,交点为
,代表在射影空间中,两条射线相交于射影中心,从而说明它们是同一条直线。
若从另一个角度分析,也可以将线的齐次坐标升维致至空间平面方程,通过平面之间的交点来求线的交点。
射影空间中线的齐次坐标在欧氏空间中表示过空间原点面的法向量。此空间平面和归一化平面相交所构成的线,就是在欧氏空间二维平面的直线。所以两条二维平面直线相交,也可以认为是空间中两个平面同时相交于归一化平面。可列方程:
从上面的方程式看,和上一部分的方程式是一样的。
由此可见在二维平面上求两直线交点可以用到欧氏几何解析法以及射影空间的解析法。然而对于计算机编程者来说,利用射影空间的齐次坐标来计算是一个好的选择。特别地,在后面部分,多线相交求交点时,齐次坐标求解交点将是很好的工具。