Mega Code Archive

 
Categories / Delphi / Examples
 

Test if 2 lines cross and find the intersection

Title: test if 2 lines cross and find the intersection? procedure IntersectionPoint(const x1,y1,x2,y2,x3,y3,x4,y4:Double; out Nx,Ny:Double); var R : Double; dx1,dx2,dx3 : Double; dy1,dy2,dy3 : Double; begin dx1 := x2 - x1; dx2 := x4 - x3; dx3 := x1 - x3; dy1 := y2 - y1; dy2 := y1 - y3; dy3 := y4 - y3; R:= dx1 * dy3 - dy1 * dx2; if R 0 then begin R := (dy2 * (x4 - x3) - dx3 * dy3) / R; Nx := x1 + R * dx1; Ny := y1 + R * dy1; end else begin if Collinear(x1,y1,x2,y2,x3,y3) then begin Nx := x3; Ny := y3; end else begin Nx := x4; Ny := y4; end; end; end; (* End Of IntersectionPoint *) function Collinear(const x1,y1,x2,y2,x3,y3:Double):Boolean; begin Result := IsEqual((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1),0); end; (* End Of Collinear *)