空间解析几何2:空间中两线段/直线的距离【附MATLAB代码】

目录

理论公式

MATLAB代码


理论公式

MATLAB代码

        公式实现

function [dis,P,Q,t1,s1]=line2LineDistance(A1,B1,C1,D1)
%求两线段的最短距离
% input
% A1,B1为线段一的两端点 C1,D1为线段二的两端点
% output
% dis,为两线段的最短距离,P,Q为距离最短时在两线段上的坐标
% t1 为第一条直线的参数t[0,1] s1 为第二条直线的参数t[0,1]
dis=0;
P=[];
Q=[];A = B1(1)-A1(1);
B = B1(2)-A1(2);
C = B1(3)-A1(3);D = D1(1)-C1(1);
E = D1(2)-C1(2);
F = D1(3)-C1(3);G = A1(1)*D+ A1(2)*E+ A1(3)*F-C1(1)*D-C1(2)*E-C1(3)*F;
H = A*D +B*E+C*F;
I = D*D+E*E+F*F;
J = A*A+B*B+C*C;
K = A1(1)*A+ A1(2)*B+ A1(3)*C-C1(1)*A-C1(2)*B-C1(3)*C;
[G H I J K];
if(H*H==I*J)s=0.5;t= (s*H-K)/J;
else
s = (H*K-G*J)/(H*H-I*J);
t = (s*H-K)/J;%dis = sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)if s>1s=1;x2 = C1(1) + D*s;y2 = C1(2) + E*s;z2 = C1(3) + F*s;Q = [x2 y2 z2];[dis,P,t]=point2Line(A1,B1,Q);
elseif s<0s=0;x2 = C1(1) + D*s;y2 = C1(2) + E*s;z2 = C1(3) + F*s;Q = [x2 y2 z2];[dis,P,t]=point2Line(A1,B1,Q);
elseif t>1t=1;x1 = A1(1) + A*t;y1 = A1(2) + B*t;z1 = A1(3) + C*t;P = [x1 y1 z1];[dis,Q,s]=point2Line(C1,D1,P);
elseif t<0t=0;x1 = A1(1) + A*t;y1 = A1(2) + B*t;z1 = A1(3) + C*t;P = [x1 y1 z1];[dis,Q,s]=point2Line(C1,D1,P);
elsex1 = A1(1) + A*t;y1 = A1(2) + B*t;z1 = A1(3) + C*t;x2 = C1(1) + D*s;y2 = C1(2) + E*s;z2 = C1(3) + F*s;P = [x1 y1 z1];Q = [x2 y2 z2];dis = sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2);
end
t1 = t;
s1 = s;
end
end
function [dis,P2,t]= point2Line (A1,B1,C1)
%求空间一点到一线段的最短距离 
%[dis,P2,Q2]=pointSegmentDistance(A,B,C)
%A B为线段首末端点,C为空间一点
%dis为最短距离 P2 Q2为最短距离的首末端点% 取0~1时P点在线段AB上滑动,>1 P点在B端点外,<0 P点在A端点外
A = B1(1)-A1(1);
B = B1(2)-A1(2);
C = B1(3)-A1(3);
D = A1(1)-C1(1);
E = A1(2)-C1(2);
F = A1(3)-C1(3);
t = -(A*D+B*E+C*F)/(A*A+B*B+C*C);
if t>1t=1;
elseif t<0t=0;
end
x1 = A1(1) + A*t;
y1 = A1(2) + B*t;
z1 = A1(3) + C*t;
dis = sqrt((x1-C1(1))^2+(y1-C1(2))^2+(z1-C1(3))^2);
P2 = [x1 ,y1,z1];
end

        测试代码

A = [-229.719,419.403,-200.000];
B = [-229.719,453.815,-549.490];
C=[-298.4758,  401.6892, -327.4938];
D=[182.5318,  339.5882, -327.8367];
%dis为线段AB、CD最短距离 
[dis,P,Q]=myDistance(A,B,C,D)%画线段AB
plot3([A(1),B(1)],[A(2),B(2)],[A(3),B(3)],'r','LineWidth',2)
hold on
%画线段CD
plot3([C(1),D(1)],[C(2),D(2)],[C(3),D(3)],'b','LineWidth',2)
hold on
%画直线AB、CD最短距离 
plot3([P(1),Q(1)],[P(2),Q(2)],[P(3),Q(3)],'k--','LineWidth',1.5)
hold on
%画线段AB、CD最短距离 
xlabel('X')
ylabel('Y')
zlabel('Z')
grid on

结果验证:

下一章:空间解析几何-空间线段与平面的关系【附MATLAB代码】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1541419.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

综述论文“Towards Personalized Federated Learning”分享

综述论文“Towards Personalized Federated Learning”分享 文章目录 综述论文“Towards Personalized Federated Learning”分享I. 引言A. 联邦学习的分类B. 个性化联邦学习的动机C. 贡献 II. 个性化联邦学习的策略策略I&#xff1a;全局模型个性化策略II&#xff1a;学习个性…

简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II

a​​​​​​​面试题 17.16. 按摩师 按摩师 题目: 分析: 使用动态规划解决 状态表示: dp[i] 表示&#xff1a;选择到 i 位置时&#xff0c;此时的最长预约时长。 但是我们这个题在 i 位置的时候&#xff0c;会面临 选择 或者 不选择 两种抉择&#xff0c;所依赖的状态需要…

集成学习详细介绍

以下内容整理于&#xff1a; 斯图尔特.罗素, 人工智能.现代方法 第四版(张博雅等译)机器学习_温州大学_中国大学MOOC(慕课)XGBoost原理介绍------个人理解版_xgboost原理介绍 个人理解-CSDN博客 集成学习(ensemble)&#xff1a;选择一个由一系列假设h1, h2, …, hn构成的集合…

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一&#xff1a;子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二&#xff1a;显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

从理论再到实践:AI大模型学习路线,提升核心竞争力,看这篇就够了

一、初聊大模型 1、什么是大模型&#xff1f; 大模型&#xff0c;通常指的是在人工智能领域中的大型预训练模型。你可以把它们想象成非常聪明的大脑&#xff0c;这些大脑通过阅读大量的文本、图片、声音等信息&#xff0c;学习到了世界的知识。这些大脑&#xff08;模型&#…

基于 Qwen2.5-Coder 模型和 CrewAI 多智能体框架,实现智能编程系统的实战教程

9 月 19 日&#xff0c;阿里开源了 Qwen2.5 系列大模型全家桶&#xff1a;除常规的语言模型 Qwen2.5 之外&#xff0c;还发布了专门针对编程的Qwen2.5-Coder模型和数学的 Qwen2.5-Math 模型&#xff0c;并且针对每个模型都提供了不同规模参数版本&#xff0c;包括&#xff1a; …

CSP-CCF★★★201909-2小明种苹果(续)★★★

一、问题描述 二、解答 关键&#xff1a;判断是否发生苹果掉落&#xff0c;使用flag[]数组来标记&#xff0c;1为掉落&#xff0c;0为没有掉落&#xff0c;这样也是为了后续比较连续三棵树是否掉落 误区&#xff1a;用最后一次正数&#xff08;即最后一次统计苹果个数&#x…

芯片开发(1)---BQ76905---底层参数配置

主要开发思路:AFE主要是采集、保护功能、均衡&#xff0c;所以要逐一去配置芯片的寄存器 采集、均衡功能主要是配置引脚 保护功能主要是参数寄存器配置&#xff0c;至于如何使用命令修改寄存器参数该系列芯片提供了子命令和直接命令两种方式 BQ76905的管脚配置 I、参数配置 …

AI赋能篇:万物皆可播,AI视频直播新趋势,轻松打造24h不间断开播!

AI赋能篇&#xff1a;万物皆可播&#xff0c;AI视频直播新趋势&#xff0c;轻松打造24h不间断开播&#xff01; 在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度渗透到我们生活的每一个角落&#xff0c;其中&#xff0c;AI视频直播作为…

工控一体机在高精度玻璃检测机中的应用

工控一体机在高精度玻璃检测机中的应用主要体现在以下几个方面&#xff1a; 一、数据采集与处理 工控一体机作为工业控制计算机&#xff0c;能够高效采集来自高精度玻璃检测机中各种传感器和执行器的数据。这些数据包括但不限于玻璃表面的图像信息、厚度、温度、光学特性等。…

05 基于STM32的DHT11温湿度获取及OLED显示(库函数)

本专栏所有源资料都免费获取,无任何隐形消费。 注意事项:STM32仿真会存在各种各样BUG,且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列,在PROTUES仿真里,32单片机一般只用一种型号,如需其他型号,可改名。 本次功能…

初中数学证明集锦之三角形内角和

导言 非常喜欢数学那套&#xff0c;由简单到复杂&#xff0c;逐层递进的证明之美。 既证了&#xff0c;而且明了 &#x1f603; 让人不得不信服&#xff01; 由人教版教材看到的三角形内角和180度的证明法&#xff0c;觉得现在课本不单传播了知识&#xff0c;而且点睛数学之…

STM32CubeIDE | 使用HAL库的ADC读取内部传感器温度

1、cubemx配置 1.1、系统配置 1.2、GPIO配置 PB2设置为“GPIO_Output” user label设置为“LED” 1.3、串口配置 模式选择为“Asynchronous”&#xff0c;其他默认 1.4、时钟树配置 全部保持默认 2、ADC配置 通道选择“Temperature Sensor Channel”&#xff0c;其他默认 …

一个 ospf 的 hub-spoke 例子

一、拓扑&#xff1a; 要求&#xff1a;利用 ospf igp配置&#xff0c;使两个 Spoke 之间的流量经过 Hub 端 二、配置思路&#xff1a; 1、基本环境搭建&#xff1a; SW1 起 vlan 10、20、30&#xff1b; 配置 G0/0/1、2、3 接口分别为 hybrid 类型&#xff08;默认&…

自建数据库VS云数据库:从《中国数据库前世今生》看未来数据管理的抉择

自建数据库VS云数据库&#xff1a;从《中国数据库前世今生》看未来数据管理的抉择 在数字化时代的滚滚洪流中&#xff0c;数据库作为核心数据管理工具&#xff0c;始终扮演着至关重要的角色。最近观看了纪录片《中国数据库前世今生》&#xff0c;让我对数据库技术的发展有了更…

cesium.js 入门到精通(5-2)

在cesium 的配置中 有一些参数 可以配置地图的显示 显示出 水的动态显示 山的效果 相当于一些动画显示的效果 var viewer new Cesium.Viewer("cesiumContainer", {infoBox: false,terrainProvider: await Cesium.createWorldTerrainAsync({requestWaterMask: tru…

漏洞复现_永恒之蓝

1.概述 永恒之蓝&#xff08;EternalBlue&#xff09;是一个影响Windows操作系统的远程代码执行漏洞&#xff0c;编号为CVE-2017-0144&#xff0c;最初由美国国家安全局&#xff08;NSA&#xff09;开发并利用&#xff0c;后来被黑客组织Shadow Brokers泄露。该漏洞存在于SMBv…

自注意力(self_attention)和位置编码

目录 1.自注意力&#xff08;self_attention&#xff09;公式 2.代码实现 2.1位置编码的代码实现 3.知识点个人理解 1.自注意力&#xff08;self_attention&#xff09;公式 2.代码实现 import math import torch from torch import nn import dltoolsnum_hiddens, num_he…

assign是赋值,不是连接

如下图是一个top文件的背压 如果把原本应该是外界输入的变量m_ip_hdr_ready通过phv_parser_hdr_ready来“赋值&#xff01;&#xff01;&#xff01;”&#xff0c;那么模块内部本该有的ready信号&#xff0c;就会是Z高阻态&#xff0c;因为没有给到值。 正确的赋值 将整个模…