100 PROGRAM DragonCurve 110 DECLARE SUB Dragon 120 SET WINDOW 0, 639, 0, 399 130 SET AREA COLOR 1 140 SET COLOR MIX(1) 0, 0, 0 150 REM SIN, COS in arrays for PI/4 multipl. 160 DIM S(0 TO 7), C(0 TO 7) 170 LET QPI = PI / 4 180 FOR I = 0 TO 7 190 LET S(I) = SIN(I * QPI) 200 LET C(I) = COS(I * QPI) 210 NEXT I 220 REM ** Initialize variables non-local for SUB Dragon. 230 LET SQ = SQR(2) 240 LET X = 224 250 LET Y = 140 260 LET RotQPi = 0 270 CALL Dragon(256, 15, 1) ! Insize = 2^WHOLE_NUM (looks better) 280 REM ** Subprogram 290 SUB Dragon (Insize, Level, RQ) 300 IF Level <= 1 THEN 310 LET XN = C(RotQPi) * Insize + X 320 LET YN = S(RotQPi) * Insize + Y 330 PLOT LINES: X, 399 - Y; XN, 399 - YN 340 LET X = XN 350 LET Y = YN 360 ELSE 370 LET RotQPi = MOD((RotQPi + RQ), 8) 380 CALL Dragon(Insize / SQ, Level - 1, 1) 390 LET RotQPi = MOD((RotQPi - RQ * 2), 8) 400 CALL Dragon(Insize / SQ, Level - 1, -1) 410 LET RotQPi = MOD((RotQPi + RQ), 8) 420 END IF 430 END SUB 440 END