空间两个直线之间的距离和公垂线 | 您所在的位置:网站首页 › 异面直线的公垂线段怎么求 › 空间两个直线之间的距离和公垂线 |
已知
直线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)⋅(P2−P1)==0 相交 直接就是0 公垂线退化为一个点不相交 我们假设公垂线与直线2的交点为 P p 2 = P 2 + K 2 ∗ V 2 P_{p2} =P_2+K_2*V_2 Pp2=P2+K2∗V2 根据点到直线距离里面的垂足公式,可以得到过 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+[(Pp2−P1)⋅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+K2∗V2−P1)⋅V1]∗V1 向量 P p 1 − P p 2 P_{p1}-P_{p2} Pp1−Pp2同时与 V 2 V_2 V2垂直 所以可以列出方程 ( P p 1 − P p 2 ) ⋅ V 2 = 0 (P_{p1}-P_{p2})\centerdot V_2 = 0 (Pp1−Pp2)⋅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+[(Pp2−P1)⋅V1]∗V1−Pp2)⋅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+K2∗V2−P1)⋅V1]∗V1−P2−K2∗V2)⋅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=V2⋅V2−(V1⋅V2)∗(V2⋅V1)(P1−P2+((P2−P1)⋅V1)∗V1)⋅V2 由于方向都是单位向量式中 V 2 ⋅ V 2 = 1 V_2\centerdot V_2=1 V2⋅V2=1可以减少一次点乘运算 有了 K 2 K_2 K2其他就都可以求出了补充 如果只需要求解距离,可以通过两个直线方向的叉乘获得公垂线方向,再利用向量 P 1 − P 2 P_1-P_2 P1−P2与公垂线方向的单位向量的点积,即可获得距离。 |
CopyRight 2018-2019 实验室设备网 版权所有 |