利用python求两个相交直线的交点

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)

利用python求两个相交直线的交点_第1张图片

根据空间直线的一点与该直线的方向向量可得到直线的点向式方程:
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:m1xx1=n1yy1=p1zz1l2:m2xx2=n2yy2=p2zz2
利用中间参数 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=m1n2m2n1m2(y1y2)n2(x1x2)
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))

代码链接

你可能感兴趣的:(GeoMeas,python,几何学,线性代数)