/// /****点到直线的距离***
/* 过点(x1,y1)和点(x2,y2)的直线方程为:KX -Y + (x2y1 - x1y2)/(x2-x1) = 0
* 设直线斜率为K = (y2-y1)/(x2-x1),C=(x2y1 - x1y2)/(x2-x1)
* 点P(x0,y0)到直线AX + BY +C =0DE 距离为:d=|Ax0 + By0 + C|/sqrt(A*A + B*B)
* 点(x3,y3)到经过点(x1,y1)和点(x2,y2)的直线的最短距离为:
* distance = |K*x3 - y3 + C|/sqrt(K*K + 1)
*/

1 public double CalOffDistance(GCD gcd, Point3d polylineStartPoint, Point3d polylineEndPoint) 2 { 3 double k = (polylineStartPoint.X - polylineEndPoint.X) / (polylineStartPoint.Y - polylineEndPoint.Y); 4 double c = (polylineStartPoint.Y * polylineEndPoint.X - polylineEndPoint.Y * polylineStartPoint.X) / (polylineStartPoint.Y - polylineEndPoint.Y); 5 if (polylineStartPoint.Y == polylineEndPoint.Y) 6 { 7 return Math.Abs(gcd.GcdY - polylineEndPoint.Y); 8 } 9 return Math.Abs(k * gcd.GcdY - gcd.GcdX + c) / Math.Sqrt(k * k + 1); 10 }