Mega Code Archive

 
Categories / Delphi / Algorithm Math
 

Perpendicular distance from point to segment in 2d

function PntToSegmentDistance(Px, Py, x1, y1, x2, y2: Double): Double; var Ratio: Double; Dx: Double; Dy: Double; begin if IsEqual(x1, x2) and IsEqual(y1, y2) then begin Result := Distance(Px, Py, x1, y1); end else begin Dx := x2 - x1; Dy := y2 - y1; Ratio := ((Px - x1) * Dx + (Py - y1) * Dy) / (Dx * Dx + Dy * Dy); if Ratio < 0 then Result := Distance(Px, Py, x1, y1) else if Ratio > 1 then Result := Distance(Px, Py, x2, y2) else Result := Distance(Px, Py, (1 - Ratio) * x1 + Ratio * x2, (1 - Ratio) * y1 + Ratio * y2); end; end; (* End PntToSegmentDistance *)