基于boost实现点到线段的投影

原创 2016年05月31日 16:06:01

该算法实现于boos中t的geomertry中,在distance算法函数中,其中的求点到线段的距离中用到了投影计算


其核心思想是:三角形的相似性,通过向量点乘,得到两个相似三角形的边的比值



/*
 *brief: project one point onto a segment
 *parma1: the point to be projected
 *param2: the start point of segment
 *param3: the end point of segment
 *parma4: the projected point on the segment
 */
bool point_project_on_segment(point_t const & p, point_t const & p1, point_t const & p2, point_t & p_prj)
{
    /*  
        Algorithm [p: (px,py), p1: (x1,y1), p2: (x2,y2)]
        VECTOR v(x2 - x1, y2 - y1)
        VECTOR w(px - x1, py - y1)
        c1 = w . v
        c2 = v . v
        b = c1 / c2
        RETURN POINT(x1 + b * vx, y1 + b * vy)
    */
    point_t w, v, projected;
    bg::convert(p2, v); 
    bg::convert(p, w); 
    bg::convert(p1, projected);

    bg::subtract_point(v, projected);
    bg::subtract_point(w, projected);
    
    double const zero = 0;
    double c1 = bg::dot_product(w, v); 
    if (c1 <= zero) {
        return false;
    }   

    double c2 = bg::dot_product(v, v); 
    if (c2 < c1) {
        return false;
    }   

    double b = c1 / c2; 
	    bg::multiply_value(v, b);
    bg::add_point(projected, v);

    p_prj = projected;
    return true;

}


使用点积投影法求点到线段的距离

来自个人百度空间的文章---2012.2.19 引子:由于面试中需要问到这些问题,所以对一些平面几何的算法做个总结,而且由于有个面试官,竟然说使用叉积可以算点到线段之间的距离,这个当时我信以为真。即...
  • pppaass
  • pppaass
  • 2015年07月06日 15:07
  • 1378

求点在直线上的投影

转自:求点在直线上的投影 如何求点到直线的投影,这个问题经常遇到。这里整理看到的资料写个总结。 PS:如果使用初中高中的方法,公式复杂易错。使用向量求解问题,便捷易懂。    1、首先假设已知...
  • gf771115
  • gf771115
  • 2014年05月23日 16:42
  • 10387

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

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

点在任意直线上的投影点

点point (x0, y0) 投影到到直线line y = m*x+b 的 投影点 point(x1,y1).x = linspace(-10,10,100); m = 1; b = 0; y = ...
  • ziqian0512
  • ziqian0512
  • 2017年06月07日 18:41
  • 1103

点在直线的投影坐标 n维向量投影坐标 几何投影坐标

点在直线的投影坐标 n维向量投影坐标 几何投影坐标 一、点在直线的投影坐标     如下图所示,直线l1:y=kx+b,直线外有一点P(x0, y0),问:点P在直线上的投影坐标为多少呢?   ...
  • guyuealian
  • guyuealian
  • 2017年01月01日 10:12
  • 3675

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

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

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

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

点到线段的最短距离算法

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

matlab 求点到任意直线的投影点坐标

【写在前面】因为图像坐标系和我们平时用的直角坐标系还是有不同的。因此在求点到直线投影点坐标的时候,不敢随便把直线用点斜式表示。为此采用向量的方法求投影点。公式推导代码实现function proj_p...
  • yaoqi_isee
  • yaoqi_isee
  • 2017年03月12日 17:08
  • 2350

点到线段最短距离的算法

  double computer(CPoint p1,CPoint p2,CPoint p0){       double S;//S表示面积       double distance1,dist...
  • woxincd
  • woxincd
  • 2007年04月26日 15:57
  • 2049
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于boost实现点到线段的投影
举报原因:
原因补充:

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