TYPE linetype x1 AS SINGLE x2 AS SINGLE y1 AS SINGLE y2 AS SINGLE END TYPE DECLARE FUNCTION intersect (line1 AS linetype, line2 AS linetype) SCREEN 13 DIM lines(0 TO 4) AS linetype lines(0).x1 = 0 lines(0).y1 = 50 lines(0).x2 = 20 lines(0).y2 = 70 lines(1).x1 = 20 lines(1).y1 = 70 lines(1).x2 = 50 lines(1).y2 = 150 lines(2).x1 = 50 lines(2).y1 = 150 lines(2).x2 = 120 lines(2).y2 = 120 lines(3).x1 = 120 lines(3).y1 = 120 lines(3).x2 = 280 lines(3).y2 = 80 lines(4).x1 = 280 lines(4).y1 = 80 lines(4).x2 = 320 lines(4).y2 = 110 x = 6 y = 2 xold = 0 yold = 0 xdelta = 12 ydelta = 4 DIM l AS linetype WHILE 1 FOR u = 0 TO 4 LINE (lines(u).x1, lines(u).y1)-(lines(u).x2, lines(u).y2), 1 NEXT l.x1 = xold l.y1 = yold l.x2 = x l.y2 = y LINE (l.x1, l.y1)-(l.x2, l.y2), 1 FOR i = 0 TO 4 a = intersect(lines(i), l) NEXT IF INKEY$ <> "" THEN DO WHILE INKEY$ = "": LOOP END IF LINE (l.x1, l.y1)-(l.x2, l.y2), 14 xold = x yold = y x = x + xdelta ydelta = ydelta + .2 y = y + ydelta FOR u = 0 TO 10000: NEXT WEND FUNCTION intersect (line1 AS linetype, line2 AS linetype) CIRCLE (line1.x1, line1.y1), 2, 15 CIRCLE (line1.x2, line1.y2), 2, 15 CIRCLE (line2.x1, line2.y1), 2, 26 CIRCLE (line2.x2, line2.y2), 2, 26 IF line1.x1 > line1.x2 THEN SWAP line1.x1, line1.x2 IF line1.y1 > line1.y2 THEN SWAP line1.y1, line1.y2 IF line2.x1 > line2.x2 THEN SWAP line2.x1, line2.x2 IF line2.y1 > line2.y2 THEN SWAP line2.y1, line2.y2 m1 = (line1.y2 - line1.y1) / (line1.x2 - line1.x1) m2 = (line2.y2 - line2.y1) / (line2.x2 - line2.x1) IF m1 = m2 THEN intersect = 0: EXIT FUNCTION b1 = line1.y1 - m1 * line1.x1 b2 = line2.y1 - m2 * line2.x1 x = -(b2 - b1) / (m2 - m1) y = x * m1 + b1 IF (x < line1.x2 AND x > line1.x1) AND (x < line2.x2 AND x > line2.x1) THEN IF (y < line1.y2 AND y > line1.y1) AND (y < line2.y2 AND y > line2.y1) THEN CIRCLE (x, y), 2, 4 intersect = 1 'EXIT FUNCTION END IF 'ELSE intersect = 0 END IF END FUNCTION