点到线段的最短距离

点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式,如图1所示。

图1 (a)最短距离为点P与其在线段AB上投影C之间的线段PC

(b)最短距离为点P与端点B(或A)所构成的线段PB(或PA)

具体算法主要有以下三种:

1、方法——经典算法

该算法直接用高中时所学习到的解析几何知识对点到线段的距离进行求解。其基本思想是先判断点在线段端点、点在线上等等的特殊情况,逐步的由特殊到一般,当忽略点在线段上的特殊情况时,判断点到线段方向的垂线是否落在线段上的方法是通过比较横纵坐标的方式来判断,最后把不同的判断情况用不同的几何方式来进行处理计算得出结果。

由上面叙述的基本思路可以知道这种算法虽然很容易理解和接受,但从算法的实用性的角度分析还是有很大的缺点的,首先是算法复杂,计算量巨大,大量的比较判断、距离计算、角度计算等等,实际应用中往往是需要求由大量线段组成的折线到某点的最短距离,如此用这样的算法计算量是不能想象的。其次经典算法中使用的一些简化运算的函数不利于语言的重新包装,如果想换编程语言的话,就比较麻烦了。

2、方法二——面积算法

该方法主要是先判断投影点是否在线段上,投影点在线段延长线上时,最短距离长度为点到端点的线段长度;当投影点在线段上时,先使用海伦公式计算三角形面积,再计算出三角形的高,即为最短距离。

运用面积算法求解点到线段最短距离思路很清晰,也很容易理解。从效率方面考虑,比如需要多次计算平方、根号,这对于大量数据进行运算是负担很重的。求面积就必须把三条边长全部求出,并且用到的海伦公式也需要进行开方运算,计算过程显得繁琐。

3、方法三——矢量算法

矢量算法过程清晰,如果具有一定的空间几何基础,则是解决此类问题时应优先考虑的方法。当需要计算的数据量很大时,这种方式优势明显。

由于矢量具有方向性,故一些方向的判断直接根据其正负号就可以得知,使得其中的一些问题得以很简单的解决。

用此方法考虑,我们只需要找到向量

  在

  方向上的投影,具体如下:

上面的

  是

  方向上的单位向量,其意义是给所求向量确定方向。

  是的两个向量的内积,且

  ,其中θ为向量AP与AB之间的夹角。

  是向量长度。

那么

  即为上图中线段AC的长度值,不带有方向性。此数值与上述表征方向的

  整体构成有大小、有方向的新向量

  ,即为

  在

  方向上的投影向量,C为投影点。

根据得到的

  ,由向量的方向性可知:如果情况是上图(a)所示,那么0

特殊情况如点在线段上、点在端点、点在线段延长线上等等的情况全部适用于此公式,只是作为特殊情况出现,无需另作讨论。这也是矢量算法思想的优势所在。

故根据r值的不同,最短距离

C#代码为:

[csharp] view plain copy

print?

public static double PointToSegDist(double x, double y, double x1, double y1, double x2, double y2)

{

double cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);

if (cross

double d2 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);

if (cross >= d2) return Math.Sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));

double r = cross / d2;

double px = x1 + (x2 - x1) * r;

double py = y1 + (y2 - y1) * r;

return Math.Sqrt((x - px) * (x - px) + (py - y1) * (py - y1));

}

后记:编程考验的不光是写代码的能力,更多的是对一个问题的优质解决方法,点到线段最短距离的求解,在数学上可能就是一个公式的问题,编程是深究起来却有如此巧妙的解决方法,记录本文方法,更多的是对以后学习的一个启发!


相关文章

  • 2014新版苏教版四年级数学第八单元教案
  • 八.垂线与平行线 一.单元分析 本单元在原有教材上有所变动,把四年级的角的度量和平行与相交两单元融合为一单元,学生在二年级上册认识长度单位时, 就已初步认识了线段,对直线也有一定的认识.在此基础上借助直观,复习直线和线段,同时引入射线概念, ...

  • 第三课时 认识垂直(2)
  • 第三课时 认识垂直(2) 教学内容]第44页的例题,完成第45页的想想做做 [教学目标] 1.通过测量,使学生认识"点到直线的距离",进一步认识垂直的有关知识 2.联系生活实际,懂得数学知识(垂直)在生活中的应用 [重点 ...

  • 三年级知识点
  • 重要知识点: 1.线段有2个端点,可以度量: 射线有1个端点,一端可以无限延长,不可以度量: 直线没有端点,两端可以无限延长,不可以度量. 2.将线段的一端无限延长,就得到一条射线: 将线段的两端无限延长,就得到一条直线. 3.线段和射线是 ...

  • 各种三角形有关线段
  • 几何 1.中线概念 连接一个顶点与它对边中点的线段,叫做三角形的中线. 中线的交点为重心,重心分中线2:1(顶点到重心:重心到对边中点). 中线:三角形中,连结一个顶点和它所对边的中点的连线段叫做三角形的中线. 中线也是线段 ,一个三角形有 ...

  • 小学数学第七册第四单元测验分析
  • 小学数学第七册第四单元测验分析    对于第七册第四单元测验的质量分析,首先我想说的是这次测验卷比去年的好,因为考查的知识点覆盖面比较广,基本上需要学生掌握的知识点这个测验卷上都有。(除了平行四边形的不稳定性。)    其次,我从我自己教的 ...

  • 第一章立体几何初步知识点
  • 高考立体几何知识点总结 一 .空间几何体 (一) 空间几何体的类型 1 多面体:由若干个平面多边形围成的几何体.围成多面体的各个多边形叫做多面体的 面,相邻两个面的公共边叫做多面体的棱,棱与棱的公共点叫做多面体的顶点. 2 旋转体:把一个平 ...

  • 两条直线的位置关系
  • 教学目标 (1)熟练掌握两条直线平行与垂直的充要条件,能够根据直线的方程判断. (2)理解一条直线到另一条直线的角的概念,掌握两条直线的夹角. (3)能够根据两条直线的方程求出它们的交点坐标. (4)掌握点到直线距离公式的推导和应用. (5 ...

  • 教师成长小结2篇
  • xx年毕业的我,满怀自信地跨进小学校门。从教后的点点滴滴历历在目,闭上眼睛,一幕幕都可以清晰地在脑海中浮现。忘不了开学第一天面对里三层外三层家长的恐慌,忘不了上第一堂课的兴奋与紧张,更忘不了第一次与家长交流时的不知所措。斗转星移,日复一日, ...

  • 垂线教案反思
  • 垂线 --教学案例与反思 张晓娟 [教学内容] 两条直线的特殊情形--垂线,以及与它有关的概念和结论. [教学目标] 经历探索垂线的过程丰富两条直线互相垂直的认知,掌握垂线的有关概念和结论,以及点到直线的距离的测量方法. [教学重.难点] ...

© 2024 范文参考网 | 联系我们 webmaster# 12000.net.cn