计算方法:
1. 两条直线方向向量v1和v2的叉积,得到平行于两条直线的平面v3。
2. 计算v3与第一条直线v1叉积,得到垂直于v3并且过线v1的平面v4,计算面v4与线v2的交点,得到线v2上的点t2。
3. 计算v3与第二条直线v2叉积,得到垂直于v3并且过线v2的平面v5,计算面v5与线v1的交点,得到线v1上的点t1。
4. t1与t2即为异面直线最近点,t1与t2距离即为异面直线距离。
matlab代码如下:
clear all;close all;clc;
p1 = rand(3,1)*2-1; %随机生成一条直线
v1 = rand(3,1)*2-1;
p2 = rand(3,1)*2-1; %随机生成另一条直线
v2 = rand(3,1)*2-1;
v1 = v1/norm(v1);
v2 = v2/norm(v2);
t = -1:0.01:1;
X1 = v1.* repmat(t,3,1) + p1;
X2 = v2.* repmat(t,3,1) + p2;
v3 = cross(v1,v2); %计算和两条直线都平行的平面
v3 = v3/norm(v3);
[planx,plany] = meshgrid(min([X1(1,:) X2(1,:)]):0.02:max([X1(1,:) X2(1,:)]),min([X1(2,:) X2(2,:)]):0.01:max([X1(2,:) X2(2,:)])); %生成平行平面
planz1 = p1(3) -(v3(1)*(p