分享给有需要的人,代码质量勿喷。
/// <summary>
/// 点(p0) 到线段(p1,p2)的距离
/// </summary>
/// <param name="p0"></param>
/// <param name="p1"></param>
/// <param name="p2"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 点与点的平面距离
/// </summary>
/// <param name="p1"></param>
/// <param name="p2"></param>
/// <returns></returns>
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;
}