点到线段的最小距离(C++)

原创 2014年01月27日 15:49:38
/*********************************/
// 如果经过点做直线的垂足,垂足落在线段上,则取垂线段的距离
// 否则取到线段两端点距离的最小值
//
// 参数:
// point:  存储点的xy坐标
// p1, p2: 线段的两点
//
// return: 点到线段的最小距离
/*********************************/

float CalculatePointToLineDistance(float point[2], const float p1[2], const float p2[2])
{
    float dis = 0.f;

    float dx = p2[0] - p1[0];
    float dy = p2[1] - p1[1];

    // 两直线垂直,向量表示法,转换后公示
    float k = -((p1[0] - point[0])*dx + (p1[1] - point[1])*dy) / ( dx*dx + dy*dy);
    float footX = k*dx + p1[0];
    float footY = k*dy + p1[1];

    //if垂足是否落在线段上
    if( footY >= min(p1[1], p2[1]) && footY <=max(p1[1], p2[1])
        && footX >= min(p1[0], p2[0]) && footX <=max(p1[0], p2[0] ) )
    {
        dis = sqrtf((footX-point[0])*(footX-point[0]) + (footY-point[1])*(footY-point[1]));
    }
    else 
    {
        float dis1 = sqrtf((p1[0]-point[0])*(p1[0]-point[0]) + (p1[1]-point[1])*(p1[1]-point[1]));
        float dis2 = sqrtf((p2[0]-point[0])*(p2[0]-point[0]) + (p2[1]-point[1])*(p2[1]-point[1]));

        dis = ( dis1 < dis2 ? dis1 : dis2 );
    }

    return dis;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianwen0529/article/details/18815155

一步一步用Delphi6实现Web Service

      本文介绍的是如何用Delphi6开发Web Service程序,并把服务程序放在IIS Web服务器上提供给各种客户程序调用。一编写服务程序第一步:File----->New----->O...
  • coala
  • coala
  • 2001-10-26 11:27:00
  • 708

点到线段的最短距离——矢量法

最近在看recast&amp;amp;detour源码的时候有遇到许多数学上的算法问题,特此记录,以便以后查看。矢量法推导: 求点P到线段AB的最短距离。分成以下三种情况(a),(b),(c)。所以可...
  • u012138730
  • u012138730
  • 2018-04-02 15:29:24
  • 36

计算几何 点到线段的距离 点在简单多边形内 点到凸多边形的距离

部分内容参考 http://blog.csdn.net/angelazy/article/details/38489293 1.点到线段的距离  矢量算法 矢量算法过程清...
  • betwater
  • betwater
  • 2016-09-04 18:58:28
  • 693

点到折线最短距离所在点距离折线起点的累积距离

点到折线最短距离所在点 距离  折线起点 的累积距离 using System; using System.Collections.Generic; using System.Linq; using...
  • my_lixiang
  • my_lixiang
  • 2015-07-08 21:08:21
  • 1527

点到线段最短距离的算法

  double computer(CPoint p1,CPoint p2,CPoint p0){       double S;//S表示面积       double distance1,dist...
  • woxincd
  • woxincd
  • 2007-04-26 15:57:00
  • 2371

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

在二维/三维图形学系统当中,线段的拾取是一个经常使用的功能如何根据鼠标点来判断线段是否被选择了,最主要的方法之一是通过点到线段的最小距离来判定的无论二维还是三维情况下,使用点到直线的距离公式似乎是最直...
  • happy__888
  • happy__888
  • 2005-11-09 15:55:00
  • 7780

hunnu11325(点到多边形的距离)

首先判断点是否在多边形上,然后求点到多边形每条边的最短距离 代码如下: #include #include #include #include #include #include #include...
  • u013509299
  • u013509299
  • 2014-03-23 19:14:26
  • 1162

计算点到线段的最短距离

  • 2013年04月09日 17:42
  • 230KB
  • 下载

点到线段的最大最小距离

点到线段的最大最小距离 //点到线段的最大最小距离 //注意判断垂足是否在线段上 double Distance(Point a,Point b,Point c) { if(a.x...
  • acm2016
  • acm2016
  • 2016-09-04 13:00:17
  • 111

点到线段的最短距离算法

点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式,如图1所示。 图...
  • zhenxin066
  • zhenxin066
  • 2014-03-05 14:23:14
  • 1527
收藏助手
不良信息举报
您举报文章:点到线段的最小距离(C++)
举报原因:
原因补充:

(最多只允许输入30个字)