【工程常用】三维空间中两条直线近似交点求解

时间:2024-12-20 07:32:35
注:关于以上方程组的求解,可参考下面两种方式。
方法一:当参数 v x a v^a_x vxa, v y a v^a_y vya, v z a v^a_z vza, v x b v^b_x vxb, v y b v^b_y vyb, v z b v^b_z vzb, n x n_x nx, n y n_y ny, n z n_z nz均非零时,将方程组化为如下形式
{ 1 v x a a x − 1 v y a a y = x a v x a − y a v y a 1 v y a a y − 1 v z a a z = y a v y a − z a v z a 1 v x b b x − 1 v y b b y = x b v x b − y b v y b 1 v y b b y − 1 v z b b z = y b v y b − z b v z b 1 n x a x − 1 n y a y − 1 n x b x + 1 n y b y = 0 1 n y a y − 1 n z a z − 1 n y b y + 1 n z b z = 0 {1vaxax1vayay=xavaxyavay1vayay1vazaz=yavayzavaz1vbxbx1vbyby=xbvbxybvby1vbyby1vbzbz=ybvbyzbvbz1nxax1nyay1nxbx+1nyby=01nyay1nzaz1nyby+1nzbz=0
vxa1axvya1ayvya1ayvza1azvxb1bxvyb1byvyb1byvzb1bznx1axny1aynx1bx+ny1byny1aynz1azny1by+nz1bz=vxaxavyaya=vyayavzaza=vxbxbvybyb=vybybvzbzb=0=0

将以上方程组化为矩阵形式
[ 1 v x a − 1 v y a 0 0 0 0 0 1 v y a − 1 v z a 0 0 0 0 0 0 1 v x b − 1 v y b 0 0 0 0 0 1 v y b − 1 v z b 1 n x − 1 n y 0 − 1 n x 1 n y 0 0 1 n y − 1 n z 0 − 1 n y 1 n z ] ∗ [ a x a y a z b x b y b z ] = [ x a v x a − y a v y a y a v y a − z a v z a x b v x b − y b v y b y b v y b − z b v z b 0 0 ] [1vax1vay000001vay1vaz0000001vbx1vby000001vby1vbz1nx1ny01nx1ny001ny1nz01ny1nz]
* [axayazbxbybz]
= [xavaxyavayyavayzavazxbvbxybvbyybvbyzbvbz00]
vxa1000nx10vya1vya100ny1ny10vza1000nz100vxb10nx1000vyb1vyb1ny1ny1000vzb10nz1 axayazbxbybz = vxaxavyayavyayavzazavxbxbvybybvybybvzbzb00

可得
[ a x a y a z b x b y b z ] = [ 1 v x a − 1 v y a 0 0 0 0 0 1 v y a − 1 v z a 0 0 0 0 0 0 1 v x b − 1 v y b 0 0 0 0 0 1 v y b − 1 v z b 1 n x − 1 n y 0 − 1 n x 1 n y 0 0 1 n y − 1 n z 0 − 1 n y 1 n z ] − 1 ∗ [ x a v x a − y a v y a y a v y a − z a v z a x b v x b − y b v y b y b v y b − z b v z b 0 0 ] [axayazbxbybz]
= [1vax1vay000001vay1vaz0000001vbx1vby000001vby1vbz1nx1ny01nx1ny001ny1nz01ny1nz]
^{-1}* [xavaxyavayyavayzavazxbvbxybvbyybvbyzbvbz00]
axayazbxbybz = vxa1000nx10vya1vya100ny1ny10vza1000nz100vxb10nx1000vyb1vyb1ny1ny1000vzb10nz1 1 vxaxavyayavyayavzazavxbxbvybybvybybvzbzb00

v x a v^a_x vxa, v y a v^a_y vya, v z a v^a_z vza, v x b v^b_x vxb, v y b v^b_y vyb, v z b v^b_z vzb, n x n_x nx, n y n_y ny, n z n_z nz中存在值为零的参数时,可直接将式(1)-(3)中对应项分子部分赋值零,得到新的等式,联立其余等式,即可得到新得方程组,求解即可。如,当 v x a = 0 v^a_x=0 vxa=0时,方程组可以化为如下形式
{ a x = x a 1 v y a a y − 1 v z a a z = y a v y a − z a v z a 1 v x b b x − 1 v y b b y = x b v x b − y b v y b 1 v y b b y − 1 v z b b z = y b v y b − z b v z b 1 n x a x − 1 n y a y − 1 n x b x + 1 n y b y = 0 1 n y a y − 1 n z a z − 1 n y b y + 1 n z b z = 0 {ax=xa1vayay1vazaz=yavayzavaz1vbxbx1vbyby=xbvbxybvby1vbyby1vbzbz=ybvbyzbvbz1nxax1nyay1nxbx+1nyby=01nyay1nzaz1nyby+1nzbz=0
axvya1ayvza1azvxb1bxvyb1byvyb1byvzb1bznx1axny1aynx1bx+ny1byny1aynz1azny1by+nz1bz=xa=vyayavzaza=vxbxbvybyb=vybybvzbzb=0=0

方法二:可使用 MATLAB 中的solve函数对以上多项式进行求解,分别得到交点A,B的坐标关于直线 l a l_a la l b l_b lb参数的表达式。具体可参考后续 程序示例 章节。