**[**Back to GRAPHICS SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**

*{
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**;

**[**Back to GRAPHICS SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**