该函数用于计算空间直线与空间平面的交点坐标。
空间直线与平面交点示意如下图所示:
利用空间直线上任意两点求得其方向向量:
L i n e V e c t o r = ( x 1 − x 2 , y 1 − y 2 , z 1 − z 2 ) = ( m , n , p ) LineVector=(x_1-x_2,y_1-y_2,z_1-z_2)=(m,n,p) LineVector=(x1−x2,y1−y2,z1−z2)=(m,n,p)
根据丘维声所著《解析几何(第三版)》第60-61页可将空间直线方程表示为“点向式”方程:
x − x 1 m = y − y 1 n = z − z 1 p \frac{x-x_1}{m}=\frac{y-y_1}{n}=\frac{z-z_1}{p} mx−x1=ny−y1=pz−z1
利用中间参数可将上式表示为:
{ x = m t + x 1 y = n t + y 1 z = p t + z 1 \left\{ \begin{array}{c} x=mt+x_1\\ y=nt+y_1\\ z=pt+z_1 \end{array} \right. ⎩⎨⎧x=mt+x1y=nt+y1z=pt+z1
通过上式与平面方程联立可计算出中间参数为:
t = − a x 1 − b y 1 − c z 1 − d a m + b n + c p t=\frac{-ax_1-by_1-cz_1-d}{am+bn+cp} t=am+bn+cp−ax1−by1−cz1−d
利用计算出的中间参数反求直线与平面交点E(x,y,z)。至此,空间直线与平面交点坐标求解完毕。
根据上述函数计算原理可知,该函数的输入为空间直线上任意两点坐标与平面方程参数:
I n p u t ( ) : { P 1 ( x 1 , y 1 , z 1 ) P 2 ( x 2 , y 2 , z 2 ) ( a , b , c , d ) ∈ a x + b y + c z + d = 0 Input(): \left\{ \begin{array}{c} P_1(x_1,y_1,z_1)\\ P_2(x_2,y_2,z_2)\\ (a,b,c,d) \in ax+by+cz+d=0 \end{array} \right. Input():⎩⎨⎧P1(x1,y1,z1)P2(x2,y2,z2)(a,b,c,d)∈ax+by+cz+d=0
根据上述函数计算流程可知,该函数的输出为空间直线与平面的交点:
O u t p u t : E ( x , y , z ) Output:E(x,y,z) Output:E(x,y,z)
P1 = np.array([-670.13, 1477.30, -1576.88])
P2 = np.array([-761.34, 914.65, -1576.88])
PlaneParams = np.array([0.00000000e+00, 5.54216347e+05, 0.00000000e+00, -3.57990507e+08])
print(calCoordinateFrom2PointsAndPlane(P1, P2, PlaneParams))
[[ -804.90000912 645.93999967 -1576.88 ]]