点到线段的距离计算方法

简介:

如何计算点到线段的最近距离

                                         算法原理图

在二维/三维图形学系统当中,线段的拾取是一个经常使用的功能

如何根据鼠标点来判断线段是否被选择了,最主要的方法之一是通过点到线段的最小距离来判定的

无论二维还是三维情况下,使用点到直线的距离公式似乎是最直接的选择

但是不要忘记点到直线公式计算的是点和直线之间的关系,而不是点和线段之间的关系

需要额外的判断,点在线段上的投影点是否位于线段内部,是才可以采用点到直线的公式,否则就不能

算法如下 
   
class Point

float Distance(Point p1, Point p2); // 返回两点之间的距离

float DistanceLine(Point a, Point b, Point c) // a和b是线段的两个端点, c是检测点

{

Point ab = b - a;

Point ac = c-a;

float f = ab * ac;

if (f<0) return Distance(c, a);//C1处的点

float d = ab * ab;

if ( f>d) return Distance(c, b);//C2处的点,d=f*cos(theta)

f = f/d; 

Point D = a + f *ab; // c在ab线段上的投影点

return Distance(c, D);

}

这个算法计算量很少,在现在流行配置的计算机基本上在当中1秒钟可以检测出上百万个线段

这个是检测一个点和一个线段之间的最短距离的

对于一个系统当中存在大量的线段需要检测的时候,应该把线段按照区域划分成组,建立一个包围盒

先检测点是否在包围盒内部,然后再进入组内检测具体的线段

本文转自博客园知识天地的博客,原文链接:点到线段的距离计算方法,如需转载请自行联系原博主。


相关文章
window.scrollTop 不生效的原因,如何解决
window.scrollTop 不生效的原因,如何解决
1106 0
|
API 开发工具
Xilinx SDK获取代码运行时间
Xilinx SDK获取代码运行时间
|
Kubernetes API 计算机视觉
利用 member update 实现 etcd 灾难恢复 [也可实现 etcd 集群迁移]
利用 member update 实现 etcd 灾难恢复 [也可实现 etcd 集群迁移]
1828 0
|
数据可视化 数据挖掘 数据处理
实时计算Flink评测
本文介绍了Flink在实时计算领域的应用实践及核心功能评估,涵盖用户行为分析、电商羊毛党识别、实时销售数据分析三大场景,展示了Flink在处理实时数据流时的高效性、准确性和可靠性。同时,文章还深入探讨了Flink的统一数据处理、事件驱动处理、高容错性、高性能低延迟、灵活窗口操作及丰富API等核心功能,并指出了其优势与待改进之处,为用户提供全面的参考。
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
550 6
|
机器学习/深度学习 自然语言处理 算法
用神经架构搜索给LLM瘦身,模型变小,准确度有时反而更高
【6月更文挑战第20天】研究人员运用神经架构搜索(NAS)压缩LLM,如LLaMA2-7B,找到小而精准的子网,降低内存与计算成本,保持甚至提升性能。实验显示在多个任务上,模型大小减半,速度加快,精度不变或提升。NAS虽需大量计算资源,但结合量化技术,能有效优化大型语言模型。[论文链接](https://arxiv.org/pdf/2405.18377)**
421 3
|
监控 Oracle 关系型数据库
|
Android开发
Android 开发 读取excel文件 jxl.jar包
Android 开发 读取excel文件 jxl.jar包

热门文章

最新文章

下一篇
开通oss服务