数字信号处理7——点到向量的距离_点到向量的距离公式-程序员宅基地

技术标签: 算法  数字信号处理  

目录

一、前言

二、点到线段的最短距离——向量法

三、点到直线的最短距离——直线法

四、点到直线最短距离——向量法


一、前言

       其实在工程应用中很多情况下计算点到直线或者点到线段的距离,比如在unity3d游戏软件设计中计算任意形状路径起点和终点连线距离最远的点,比如用于雷达聚类后在多目标跟踪算法中计算哪个sensor距离track最近,另外还需要知道要计算的点位于直线的哪一侧,这些计算在游戏开发或者数字信号后处理要求实时性,因此需要高效的运算。这里记录一下几种计算方法,方便需要时回忆。

需要记住的是点乘(内积)计算的一个向量在另一个向量上的投影cos,叉乘计算的是从同一点出发的两个向量,一个向量在距离另一个向量垂直距离sin

二、点到线段的最短距离——向量法

要求:计算平面一点到两点连成的线段,哪一个端点最近;另外计算点到两点形成向量的最短距离的计算(PC);

向量法计算在处理数据运算量多的地方相比联合求方程有显著的运算效率。

上面的 方向上的单位向量,其意义是给所求向量确定方向。是的两个向量的内积,且   ,其中θ为向量AP与AB之间的夹角是向量长度。

根据向量的方向性可以推出以下表达,分别对应上述的(a)(b)(c):

三、点到直线的最短距离——直线法

参考1中提供了8中不同的计算方法,可以开阔思维,但是工程中,我们更习惯使用简单的两点法求直线方程:

直线一般公式 为:

Ax+By+C =0;

直线外一点 (x0,y0) 到直线距离公式 :

d = (Ax0 + By0 + C) / sqrt(A ^ 2 + B ^ 2);

假设首尾两点 p1(x1, y1),p2(x2, y2), 待计算点 p3(x0, y0).

把p1,p2带入直线一般公式得:

Ax1 + By1 + c = 0 Ax2 + By2 + c = 0 Ax1 + By1 = Ax2 + By2, 两式得A(x1 - x2) = B(y2 - y1)

A = y2 - y1, B = x1 - x2 把A, B带入方程求解C: x1y2 - x1y1 + x1y1 - x2y1 + c = 0

求得 C =-(x1*(y2-y1)+y1*(x1-x2)) = x2y1 - x1y2, 将A,B,C带入点到直线距离公式可求得距离值:

总结起来:

d=\frac{(y2-y1)*x0+(x1-x2)*y0-(y2-y1)*x1-(x1-x2)*y1}{\sqrt{A^{2}+B^{2}}}

nx = -\frac{y1-y2}{\sqrt{A^{2}+B^{2}}}

nx = \frac{x1-x2}{\sqrt{A^{2}+B^{2}}}

n=-x1*nx-y1*ny

d=x0*nx+y0*ny+n

四、点到直线最短距离——向量法

向量法其实与直线法的求解结果一样,但是更直观也更容易理解。

假设首尾两点 A(x1, y1),B(x2, y2), 待计算点 P(x0, y0).

\overrightarrow{AB} = (x2-x1,y2-y1),\overrightarrow{AP} = (x0-x1,y0-y1)

|\overrightarrow{PC}| =\frac{|\overrightarrow{AB}X\overrightarrow{AP}|}{|AB|} =|AP|*sin(\Theta )

参考:

点到直线的八种计算方法(求解方法思路众多,但是运算着实麻烦):https://zhuanlan.zhihu.com/p/26307123

点到向量距离(核心思想有,但是有一些表达错误):https://blog.csdn.net/lkj345/article/details/80878128

unity3d 点到向量的距离算法(方法描述ok,但是求解两侧位置不如向量法直接):https://blog.csdn.net/qq_40795166/article/details/100030169

点到线段的最短距离:https://blog.csdn.net/angelazy/article/details/38489293

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qinze5857/article/details/109705026

智能推荐

日语900句(衣食住行)PDF下载地址|百度云盘免费分享_日文原版pdf 百度云-程序员宅基地

文章浏览阅读1.5k次。有人说,金字塔的魅力就在于它完美的建筑结构,有坚实深厚的基础,才造就了塔尖的辉煌。 学好日语也是同样的道理,坚实的语言基础很多时候来源于大量的输入,量变达到质变,这种语言便能脱口而出,语感”则应运而生。本书为《日语900句,衣食住行》,围绕与现代生活息息相关的话题,分为“衣”、“食”、“住”、“行”四章,每章又分为若干个谈话主题,每个主题由日常用语一点通、经典句型、疯狂表达、疯狂对话、词句荟萃、疯狂链接和经典影像观摩几部分组成。其中日常用语一点通是一些与话题相关的经典表达,比较生活化,不乏幽默、风趣_日文原版pdf 百度云

android opengl es 2d,Android OpenGL ES 2.0 - glReadPixels()和glTexImage2D()绘制黑色纹理?-程序员宅基地

文章浏览阅读510次。我正在研究一些Android代码,用于在丢失和重新创建EGL上下文之间缓存和重绘帧缓冲区对象的颜色缓冲区。开发主要发生在运行Honeycomb的Xoom平板电脑上。无论如何,我想要做的是将直接ByteBuffer中的FBO调用glReadPixels()的结果存储起来,然后将该缓冲区与glTexImage2D()一起使用并将其拖回(现在已清除)帧缓冲区。所有这些似乎工作正常 - 根据Java无法理..._android glreadpixels 黑

windows远程桌面实现之一 (抓屏技术总览 MirrorDriver,DXGI,GDI)_getframedirtyrects-程序员宅基地

文章浏览阅读2.9w次,点赞20次,收藏103次。by fanxiushu 2017-06-14 转载或引用请注明原始作者要实现远程桌面功能,首先要做的就是桌面图片的截取,而且要达到比较流畅的视觉效果,需要到达每秒20帧以上。截取桌面图片,就是定时截取windows桌面的图片,随便怎么都能做到,好像挺简单的。通用的做法就是GetDC(GetDesktokWindow() )获取桌面的DC,然后使用Creat_getframedirtyrects

Python+Selenium简单实现Web自动化测试_使用python+selenium进行简单的自动化测试用例-程序员宅基地

文章浏览阅读2k次,点赞6次,收藏40次。这篇文章是入门级别的应用Python + Selenium进行自动化测试,包括环境搭建及简单的实例。基本思想是用Firefox Selenium IDE插件录制脚本并生成Python代码,用Python结合Selenium及浏览器驱动程序执行脚本。操作系统是Windows,过程中有不明白的地方记得百度下,比如不知道如何打开Windows CMD命令行、不知道如何设置环境变量等,因为本文的前提是读者已有一定的基础知识。安装Python,访问其官网www.python.org下载最新版本,建议选择Pytho._使用python+selenium进行简单的自动化测试用例

outlook2016 修改保存路径-程序员宅基地

文章浏览阅读5k次。http://blog.csdn.net/mergerly/article/details/50008529 (Outlook 2016 pst/ost邮件数据文件迁移实现)_outlook 2016 for mac 更改邮件存放路径

CubeMX+VSCode+Ozone的STM32开发工作流(二)VSCode环境配置_fpv4-sp-d16-程序员宅基地

文章浏览阅读4.5k次,点赞11次,收藏38次。使用arm gnu 工具链编译调试stm32程序,支持daplink和jlink、stlink_fpv4-sp-d16

随便推点

【DL】基于pytorch搭建BP神经网络/人工神经网络/多层感知机/全连接神经网络的鸢尾花分类_基于pytorch设计并实现一个3层全连接神经网络,实现鸢尾花数据集分类。-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏2次。使用pytorch搭建的BP神经网络/人工神经网络/多层感知机/全连接神经网络实现sklearn中鸢尾花的分类。_基于pytorch设计并实现一个3层全连接神经网络,实现鸢尾花数据集分类。

Excel 2010 VBA 入门 139 创建工作簿级的自定义选项卡_excel主选项卡的自定义为什么任何工作薄都能使用-程序员宅基地

文章浏览阅读2k次。题自定义选项卡,使得该设置仅对某个工作簿有效。码创建自定义选项卡的XML文件,将其添加进Excel工作簿文件中。步骤1 创建一个文件夹,将其命名为“customUI”。步骤2 打开“记事本”程序,在其中输入以下内容:<customUI xmlns="://schemas.microsoft.com/office/2009/07/customi"> <ribbon> <tabs> <tab id="customTab" labe.._excel主选项卡的自定义为什么任何工作薄都能使用

nxlog windows安装部署-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏3次。nxlog 介绍 nxlog 是用 C 语言写的一个跨平台日志收集处理软件。其内部支持使用 Perl 正则和语法来进行数据结构化和逻辑判断操作。不过,其最常用的场景。是在 windows 服务器上,作为 logstash 的替代品运行。同时它也支持Linux、Android系统。官方下载地址:http://nxlog.co/products/nxlog-community-edit..._nxlog 绿色安装

nginx反向代理结合keepalived实现高可用_–no-header-程序员宅基地

文章浏览阅读1k次。一、概念正向代理正向代理最大的特点是客户端非常明确要访问的服务器地址。服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。总结  始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的_–no-header

第七篇 STM32CubeMX创建STM32工程之TIM定时器实验_stm32cubemx怎么生成tim.c-程序员宅基地

文章浏览阅读206次。时间计算stm32f103c8t6时钟72M,进行7200分频得到1M信号,1M信号每计数5000进行一次跳变,频率为1hz,周期为1s。该工程配置时晶振选用的无源晶振,第二篇LED的配置中晶振为有源晶振,请读者在配置自己的工程时注意。该程序程序实现LED的翻转,每500ms跳变一次,周期为1S。2.配置毫秒定时器,定时时间500ms。1.配置LED引脚,参考第一篇。1.修改user.c代码如下。3.开启定时器更新中断。_stm32cubemx怎么生成tim.c

STK 11.6 (AGI System Tool Kit)安装包 Matlab与STK互联仿真_stk11 软件下载地址-程序员宅基地

文章浏览阅读1.7w次,点赞26次,收藏33次。软件安装包版本包含stk9.2,stk10,stk11.01,stk11.6。都可与matlab进行互联仿真。stk11.6包含官方各种附加模块,如EOIR,Analyzer,Schedule等等,同时可以用其他软件调用stk进行实时界面显示。同时本人承接stk仿真, matlab 与stk 互联仿真, matlab, GUI等方面项目,可以在咸鱼或添加微信私聊,也可以看博客其他内容介绍..._stk11 软件下载地址