两空间线段最短距离计算

       本文中向量 叉乘用 x 表示 点乘用 * 表示

一、首先计算两根三维空间中的线段距离:

      见上图,假设两线段分别为PQ和ST,线段UV为其最短距离所在的直线上,UV的长度为两线段间的最短距离。

判断两线段是共面还是异面

     先获取两线段PQ及ST的法向量 PUB=PQ x ST(叉乘)

     再计算d=PUB*UV(点积)来判断两线段(所在直线)是否共面,若d=0则共面反之异面。

分情况讨论

①异面时有

      distance=PUB*UV/|PUB|,取distance的绝对值即为两线段间的最短距离。

②共面时可计算某一条线段上的两个端点到另一条线段的最短距离即可(此种计算也包括了两线段平行的情况)

       如上图所示,绿色箭头为最短距离所处的线段,AB为一条线段的两个端点形成的向量AB,P为另一条线段的一个端点,分别代表在线段AB上,线段BA的延长线上,以及线段AB的延长线上。

       以上情况均有向量AD=r*AB,

        ∴ |AD|=|r|*|AB|

        又|AD|=|AP|*cos<AP,AD>=AP*AB/|AB|,

        cos<AP,AD>=±(AP*AB)/|AP||AB|(上图第二种情况时为-)

        又AD为向量AP在向量AB上的投影(上图第二种情况取反)

        ∴|AD|=AP*AB/|AB|,

        可得 r=AP*AB/|AB|²

         当r<0时,最短距离为AP,r>1时,最短距离为BP,否则为PD。

         其中|PD|=|AP|*sin<AP,AB>=|AP x AB|/|AB|

判断直线是否共线_yangyoung4ever的博客-CSDN博客

三维空间异面直线最短距离计算_用叉乘计算异面直线的最短距离_yangyoung4ever的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值