版权声明:本文为博主原创文章,未经博主允许不得转载。 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