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

article/2025/9/1 2:12:00

已知

直线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与公垂线方向的单位向量的点积,即可获得距离。


http://chatgpt.dhexx.cn/article/qDRvFRi1.shtml

相关文章

两点间距离、点到直线距离、点到线段距离、线段到线段距离

两点之间的距离 直接运用两点间距离公式 (x2-x1)^ 2(y2-y1)^ 2开根号 //两点间距离 double getDistancePP(Point a,Point b) { //这个代码是部分代码,有些逻辑没有展现完全,大家往下看!Point c(b.x-a.x,b.y-a.y);//返回一个新的点return c.abs();//取模 }点到直线距离 通常给出…

两平行平面间的距离

两平行平面方程为AxByCzD10,AxByCzD20 转载于:https://www.cnblogs.com/qiu-hua/p/8006040.html

两条平行线相交于一点

2019独角兽企业重金招聘Python工程师标准>>> 欧几里德几何说,两条平行的直线永远无法相交,爱因斯坦站在宇宙空间的角度猜测两条平行线有可能能相交,但到底如何相交,爱因斯坦也没有给出证明,科学家们至今也无…

【opencv】两条平行线之间的距离

问题:一张输入图片,图片上有两条平行线,求出这两条平行线之间的距离 解决思路: 1. 对图像中的直线进行细化 2. 提取直线的轮廓坐标 3. 对轮廓上的坐标进行直线集合,从而得到直线方程 4. 计算两条直线之间的距离 …

OpenCV计算两条平行线之间的距离

代码来自www.opencvchina.com #include "cv.h" #include "highgui.h" #include "cxcore.h" #include <stdlib.h> #include <stdio.h>#ifndef LINESDISHEADER#define LINESDISHEADER//对输入图像进行细化 void ThinImage(IplImage* s…

用vue实现tab切换

用vue实现tab切换 html代码 <div id"app"><ul class"tab-tilte"><li click"cur0" :class"{active:cur0}">html</li><li click"cur1" :class"{active:cur1}">css</li><li…

tab切换(用jQuery实现)?

页面中经常用到的tab栏&#xff0c;来分类展示内容 我认为掌握tab栏切换算是从静态页面到动态页面所迈出的第一步&#xff0c;并且在以后的工作中(jQuery框架开发)会作为jQuery中的常用事件和方法&#xff0c;反复的使用&#xff0c;所以掌握tab栏切换至关重要&#xff01;&am…

JQUERY实现TAB切换

博主是一枚前端小菜鸟&#xff0c;因为挺长时间没接触页面布局了&#xff0c;居然连tab栏切换都给忘了&#xff0c;后来博主看了一些前端资料还有书&#xff0c;发现网上的很多方法都杂乱无章&#xff0c;看的云里雾里的&#xff0c;冗余代码太多&#xff0c;这让新手小白会很苦…

React实现tab切换

下面来编写一个tab选项卡切换效果&#xff0c;效果如下图所示&#xff1a; 下面我放上该组件的代码&#xff1a; import React, { Component } from react; import { Link } from react-router; import ../scss/base.scss; import ../scss/tab.scss;class TabController exten…

vue实现Tab切换功能

在项目开发中&#xff0c;我们经常会碰到Tab切换的功能&#xff0c;而在Vue中想实现这样的功能也应该有很多种&#xff0c;常用的三种应该是 Tab路由切换、Tab动态组件切换、通过v-show设置Tab显示隐藏。每种方法实现起来其实都不难&#xff0c;看看官网介绍或看几篇博客应该就…

tab切换效果

1.效果图 2.分析步骤 1.首先写vue先引入&#xff1a;<script src"https://cdn.jsdelivr.net/npm/vue2.6.14/dist/vue.js"></script> 2.接着写静态布局 3.挂载dom 4.添加指令 5.肯定要储存数据 6. 最后效果实现 3.代码块部分 按步骤操作 1.首先&#xf…

vue中如何实现tab切换功能?

一、v-show控制内容切换 1&#xff09;简单版原理&#xff1a;用点击事件改变num值作为开关&#xff0c;控制tab样式和内容显示隐藏。 2&#xff09;数据渲染原理&#xff1a;主要利用v-for绑定的index来控制&#xff0c;跟上面差不多。 二、组件切换。 知识点主要是vue中is的…

点击tabs切换不同的内容

1.通过v-for遍历posts,然后渲染数据 2.定义currentTabs变量 3.运用computed计算属性 4.点击按钮时&#xff0c;切换下边的内容 5.点击切换tabs时&#xff0c;高亮当前tabs 4.将切换tabs的文件封装成组件&#xff0c;可以使用keep-alive进行缓存数据 5.使用keep-alive触发的生命…

Tab选项卡切换

Tab选项卡切换 基本代码 HTML代码&#xff1a; <div id"notice" class"notice"><!-- 标题--><div id"notice-tit" class"notice-tit"><ul><li><a href"#">公告</a></li>…

【JS实现tab切换】

JavaScript实现tab切换。 点击科技显示图一, 点击探索显示图二。 body部分&#xff1a; <div class"box"><ul><li class"active">科技</li><li>探索</li></ul><ol><li class"active">科…

Tab页面切换

页面效果如图 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"widthdevice-…

Vue实现Tab切换效果

通过Vue实现简单的Tab切换 实现思路是点击上方的标题&#xff0c;下方的内容随之发生改变&#xff0c;上方和下方用的是两个块&#xff0c;是兄弟节点&#xff0c;所以需要点击tab标题和下方内容一一对应&#xff0c;基予两个模块若下标相同是一个内容实现的。Tab切换第一步先…

html的tab切换

离开学还有10天了&#x1f630; 今天再水一篇博客 &#xff08;如图&#xff09; 通过点击来切换tab。 具体思路十分简单&#xff0c;将这些都先包含进一个大的div 先是html部分 <div class"body1"><div class"game"><ul><li>…

Vue实现选项卡切换,tab切换

1、实现tab切换就是 单击一个选项卡显示其对应的内容&#xff0c;且被点击的选项卡改变颜色&#xff0c;下面有两种实现方法&#xff08;都不要忘了vue.js的目录要写正确&#xff09; 2、第一种方法效果图 这个没什么可说的&#xff0c;直接看代码吧&#xff08;两种方式&…

最简单的Tab切换

HTML <div class"main"><div class"btn"><!-- Tab标题 --><span class"active spanList">课程介绍</span><span class"spanList">用户故事</span><span class"spanList">…