Title: Determine the Point of intersection for two 2D segments
Procedure IntersectPoint(x1,y1,x2,y2,x3,y3,x4,y4:Double; Var 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;
Function Collinear(x1,y1,x2,y2,x3,y3:Double):Boolean;
Begin
Result := (((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))=0);
End;
(* End Of Collinear *)