空间两个直线之间的距离和公垂线

已知

直线1:直线任意一点 P 1 P_1 P1直线方向 V 1 V_1 V1 (单位向量)
直线2:直线任意一点 P 2 P_2 P2直线方向 V 2 V_2 V2 (单位向量)
在这里插入图片描述

求解过程

需要用到点到直线的距离和垂足相关内容,参考 这里
下文中 ⋅ \centerdot 代表点乘 ∗ * 代表乘 × \times ×代表叉乘。
首先判断是否平行 V 1 = = V 2 V_1==V_2 V1==V2 (如果写程序需要注意误差)

  • 如果平行
    就利用点到直线的距离方法计算 P 1 P_1 P1到直线2的距离就可以,公垂线有无数个,看你怎么定义了
  • 不平行
    判断是否相交 ( V 1 × V 2 ) ⋅ ( P 2 − P 1 ) = = 0 (V_{1}\times V_{2})\centerdot(P_{2}-P_{1})==0 (V1×V2)(P2P1)==0
    • 相交 直接就是0 公垂线退化为一个点
    • 不相交
      我们假设公垂线与直线2的交点为 P p 2 = P 2 + K 2 ∗ V 2 P_{p2} =P_2+K_2*V_2 Pp2=P2+K2V2
      根据点到直线距离里面的垂足公式,可以得到过 P p 2 P_{p2} Pp2与直线1对应的垂足表达式(也就是公垂线的另一个点)
      P p 1 = P 1 + [ ( P p 2 − P 1 ) ⋅ V 1 ] ∗ V 1 P_{p1}=P_1+[(P_{p2}-P_1)\centerdot V_1]*V1 Pp1=P1+[(Pp2P1)V1]V1
      P p 1 = P 1 + [ ( P 2 + K 2 ∗ V 2 − P 1 ) ⋅ V 1 ] ∗ V 1 P_{p1}=P_1+[(P_2+K_2*V_2-P_1)\centerdot V_1]*V1 Pp1=P1+[(P2+K2V2P1)V1]V1
      向量 P p 1 − P p 2 P_{p1}-P_{p2} Pp1Pp2同时与 V 2 V_2 V2垂直
      所以可以列出方程
      ( P p 1 − P p 2 ) ⋅ V 2 = 0 (P_{p1}-P_{p2})\centerdot V_2 = 0 (Pp1Pp2)V2=0

      ( P 1 + [ ( P p 2 − P 1 ) ⋅ V 1 ] ∗ V 1 − P p 2 ) ⋅ V 2 = 0 (P_1+[(P_{p2}-P_1)\centerdot V_1]*V1-P_{p2})\centerdot V_2 = 0 (P1+[(Pp2P1)V1]V1Pp2)V2=0
      ( P 1 + [ ( P 2 + K 2 ∗ V 2 − P 1 ) ⋅ V 1 ] ∗ V 1 − P 2 − K 2 ∗ V 2 ) ⋅ V 2 = 0 (P_1+[(P_2+K_2*V_2-P_1)\centerdot V_1]*V1-P_2-K_2*V_2)\centerdot V_2 = 0 (P1+[(P2+K2V2P1)V1]V1P2K2V2)V2=0
      整理得到

      K 2 = ( P 1 − P 2 + ( ( P 2 − P 1 ) ⋅ V 1 ) ∗ V 1 ) ⋅ V 2 V 2 ⋅ V 2 − ( V 1 ⋅ V 2 ) ∗ ( V 2 ⋅ V 1 ) K_2 =\frac{(P_1-P_2+((P_2-P_1)\centerdot V_1)*V_1)\centerdot V_2}{V_2\centerdot V_2-(V_1\centerdot V_2)*(V_2\centerdot V_1)} K2=V2V2(V1V2)(V2V1)(P1P2+((P2P1)V1)V1)V2

      由于方向都是单位向量式中 V 2 ⋅ V 2 = 1 V_2\centerdot V_2=1 V2V2=1可以减少一次点乘运算
      有了 K 2 K_2 K2其他就都可以求出了

补充
如果只需要求解距离,可以通过两个直线方向的叉乘获得公垂线方向,再利用向量 P 1 − P 2 P_1-P_2 P1P2与公垂线方向的单位向量的点积,即可获得距离。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值