calCoordinateFrom2Lines
功能
已知两直线的“点向式”方程,分别输入两条直线的点和方向向量,计算两直线的交点坐标。
原理
如图所示,空间上两条直线对应的点坐标 P ( x 1 , y 1 , z 1 ) P(x_1,y_1,z_1) P(x1,y1,z1)、 Q ( x 2 , y 2 , z 2 ) Q(x_2,y_2,z_2) Q(x2,y2,z2),对应的方向向量 s 1 ( m 1 , n 1 , z 1 ) s_1(m_1,n_1,z_1) s1(m1,n1,z1)、 s 2 ( m 2 , n 2 , p 2 ) s_2(m_2,n_2,p_2) s2(m2,n2,p2),两条直线相交于 M ( x , y , z ) M(x,y,z) M(x,y,z)。
根据空间直线的一点与该直线的方向向量可得到直线的点向式方程:
l
1
:
x
−
x
1
m
1
=
y
−
y
1
n
1
=
z
−
z
1
p
1
l
2
:
x
−
x
2
m
2
=
y
−
y
2
n
2
=
z
−
z
2
p
2
l_1:\frac{x-x_1}{m_1}=\frac{y-y_1}{n_1}=\frac{z-z_1}{p_1}\\ l_2:\frac{x-x_2}{m_2}=\frac{y-y_2}{n_2}=\frac{z-z_2}{p_2}
l1:m1x−x1=n1y−y1=p1z−z1l2:m2x−x2=n2y−y2=p2z−z2
利用中间参数
t
t
t可将直线上某点坐标表示为:
x
=
x
1
+
m
1
t
y
=
y
1
+
n
1
t
z
=
z
1
+
p
1
t
x=x_1+m_1t\\ y=y_1+n_1t\\ z=z_1+p_1t
x=x1+m1ty=y1+n1tz=z1+p1t
将该点坐标带入
l
2
l_2
l2中,计算出
t
t
t的值为:
t
=
m
2
(
y
1
−
y
2
)
−
n
2
(
x
1
−
x
2
)
m
1
n
2
−
m
2
n
1
t=\frac{m_2(y_1-y_2)-n_2(x_1-x_2)}{m_1n_2-m_2n_1}
t=m1n2−m2n1m2(y1−y2)−n2(x1−x2)
将
t
t
t代入该点坐标即可求出该点坐标值。
使用
输入
直线 l 1 l_1 l1的任意点坐标 P ( x 1 , y 1 , z 1 ) P(x_1,y_1,z_1) P(x1,y1,z1)和该直线的方向向量 s 1 ( m 1 , n 1 , p 1 ) s_1(m_1,n_1,p_1) s1(m1,n1,p1)
直线 l 2 l_2 l2的任意点坐标 Q ( x 2 , y 2 , z 2 ) Q(x_2,y_2,z_2) Q(x2,y2,z2)和该直线的方向向量 s 2 ( m 2 , n 2 , p 2 ) s_2(m_2,n_2,p_2) s2(m2,n2,p2)
输出
空间两直线的交点 M ( x , y , z ) M(x,y,z) M(x,y,z)
DEMO
import geomeas as gm
import numpy as np
P_1 = np.array([-108.45, 174.45, 0])
s_1 = np.array([-335.6, -77.27, 0])
Q_1 = np.array([227.15, 174.45, 0])
s_2 = np.array([335.6, -77.27, 0])
print(gm.Coordinate().calCoordinateFrom2Lines(P_1, s_1, Q_1, s_2))