matlab 距离最近的点,matlab练习程序(异面直线最近点和距离)

计算方法:

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值