1. 程式人生 > >C++:點到線段的平面距離。點與點的平面距離。

C++:點到線段的平面距離。點與點的平面距離。

LPoint是自己定義的點

//點(p0)  到線段(p1,p2)的距離
double GroundFilter::xj2DistancePointAndLine( LPoint p0, LPoint p1, LPoint p2 )
{
    double dis12 = xj2DistancePointAndPoint(p1, p2);//線段長度
    double dis01 = xj2DistancePointAndPoint(p0, p1);//p1與p0的距離
    double dis02 = xj2DistancePointAndPoint(p0, p2);//p2與p0的距離
    double HalfC = (dis12 + dis01 + dis02) / 2;// 半周長
    double s = sqrt(HalfC * (HalfC - dis12) * (HalfC - dis01) * (HalfC - dis02));//海倫公式求面積
    double xj2DisPL = 2 * s / dis12;// 返回點到線的距離(利用三角形面積公式求高)

    return xj2DisPL;
}


//點與點的平面距離
double GroundFilter::xj2DistancePointAndPoint(LPoint p1, LPoint p2 )
{
    double x1=p1.x, y1=p1.y;
    double x2=p2.x, y2=p2.y;

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

    return dis;
}