home *** CD-ROM | disk | FTP | other *** search
- {
- FROM: Paul R. Santa-Maria 71674,422, 71674,422
- TO: Gayle Davis, 72067,2726
- DATE: 1/16/95 10:47 PM
- Re: SWAG submission (GRAPHICS)
-
- {The algorithm of this line intersection routine is based on vector
- cross products of the line endpoints. The recursion is only one level
- deep, to handle a specific degenerate case (collinear lines). If the
- degenerate case is detected, it nudges one end of one line and looks
- to see if the intersection criterion is still fulfilled. If not, it
- nudges the other end and tries again.--Steve Schafer [CIS 76711,522]}
-
- function INTERSECT(L1X1, L1Y1, L1X2, L1Y2,
- L2X1, L2Y1, L2X2, L2Y2 : LongInt) : Boolean;
- var
- Z1, Z2, Z3, Z4 : LongInt;
- begin
- Z1 := L1X1*(L2Y2-L2Y1)+L2X2*(L2Y1-L1Y1)+L2X1*(L1Y1-L2Y2);
- Z2 := L2X1*(L1Y1-L1Y2)+L1X1*(L1Y2-L2Y1)+L1X2*(L2Y1-L1Y1);
- Z3 := L1X2*(L2Y1-L2Y2)+L2X1*(L2Y2-L1Y2)+L2X2*(L1Y2-L2Y1);
- Z4 := L2X2*(L1Y2-L1Y1)+L1X2*(L1Y1-L2Y2)+L1X1*(L2Y2-L1Y2);
- if (Z1 = 0) and (Z2 = 0) and (Z3 = 0) and (Z4 = 0) then
- INTERSECT := (INTERSECT(L1X1, L1Y1, L1X2, L1Y2, L2X1, L2Y1,
- L2X1+L2Y2-L2Y1, L2Y1+L2X1-L2X2) or
- INTERSECT(L1X1, L1Y1, L1X2, L1Y2, L2X2+L2Y2-L2Y1,
- L2Y2+L2X1-L2X2, L2X2, L2Y2))
- else if (((Z1 >= 0) and (Z2 >= 0) and (Z3 >= 0) and (Z4 >= 0)) or
- ((Z1 <= 0) and (Z2 <= 0) and (Z3 <= 0) and (Z4 <= 0))) then
- INTERSECT := True
- else
- INTERSECT := False;
- end;
-
-