已知三维空间两条直线,如何计算两条直线距离最近的位置的中点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itworld123/article/details/79091656
2018-01-18   创建人:Ruo_Xiao
开发环境:Matlab 2010
邮箱:[email protected]

假设:
这里写图片描述
P1和P2是直线L1上的两个点,P3和P4是直线L2上的两个点。

一、思路

1、由P1和P2计算出直线L1的方向向量D1和方程,P3和P4计算出直线L2的方向向量D2和方程。
2、由两直线的方向向量计算法向量N。
3、N和P1可以确定平面Plane1,N和P3可以确定平面Plane2。
4、N和P1可以确定直线L3,L3和Plane2的交点为P5。
5、P5和D1可以确定直线方程L4,L4和L2的交点就是L1和L2两条直线最短距离上的一个点P6。
6、N和P6可以算出法线L5。
7、L5和L1的交点就是就是L1和L2两条直线最短距离上的一个点P7。
7、中点坐标为P = (P6 + P7)/2。

二、计算公式

1、直线L1的方向向量D1:
这里写图片描述
2、直线L2的方向向量D2:
这里写图片描述
3、直线L1的方程:
这里写图片描述
4、直线L2的方程:
这里写图片描述
5、D1和D2的法向量N:
这里写图片描述
6、平面Plane2的方程:
这里写图片描述
7、直线L3的方程:
这里写图片描述
8、L3和Plane2的交点P5:
这里写图片描述
这里写图片描述
这里写图片描述
9、P5和D1组成的直线方程L4:
这里写图片描述
10、L4和L2的交点P6:
这里写图片描述
这里写图片描述
这里写图片描述
12、法线N的方程:
这里写图片描述
13、法线N和L1的交点P7:
这里写图片描述
这里写图片描述
这里写图片描述
14、中点坐标:
这里写图片描述

三、源码

function P = TwoLineCrossPoint(P10,P11,P20,P21)
    f1 = (P10(1)-P20(1))*(P11(2)-P10(2))*(P21(2)-P20(2));
    f2 = (P11(1)-P10(1))*(P21(2)-P20(2));
    f3 = (P21(1)-P20(1))*(P11(2)-P10(2));
    y = (P10(2)*f2+f1-P20(2)*f3)/(f2+f3);
    x = (y-P10(2))*(P11(1)-P10(1))/(P11(2)-P10(2))+P10(1);
    z = (y-P10(2))*(P11(3)-P10(3))/(P11(2)-P10(2))+P10(3);
    P = [x,y,z];
end

猜你喜欢

转载自blog.csdn.net/itworld123/article/details/79091656