基于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
  • 1125

二维平面点到线段距离

  • 2010年07月19日 19:25
  • 774B
  • 下载

java 代码 点到线段的最短距离

// 点到直线的最短距离的判断 点(x0,y0) 到由两点组成的线段(x1,y1) ,( x2,y2 ) private double pointToLine(int x1, in...
  • ltfgood
  • ltfgood
  • 2011年10月20日 09:02
  • 4044

计算点到线段的最短距离

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

玲珑杯-射击气球-点到线段的距离

(在线编辑)求点到线段的距离 对于空间V-xyz三维几何中点到水平线段的距离,可以投影到xy平面(欧式几何)上。distance = √(∆h ^2 + d ^2); 其中d为投影xy平面上的点到线段...

09ACM计算线段投影颜色长度

  • 2013年09月26日 23:41
  • 3KB
  • 下载

点到线段的最近点

第一种: 设直线方程为ax+by+c=0,点坐标为(m,n)      则垂足为((b*b*m-a*b*n-a*c)/(a*a+b*b),(a*a*n-a*b*m-b*c)/(a*a+b*b))  ...

点到直线、线段的距离

补充数学知识: 直线方程一般式 Ax + By + C = 0 点斜式 y-y1 = k(x - x1) 斜切式 y = kx +b 两点式 (y-y1)/(y2-y1) =(x-x1)/(x...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于boost实现点到线段的投影
举报原因:
原因补充:

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