37 lines
888 B
Text
37 lines
888 B
Text
10 REM Dragon curve
|
|
20 DEF FN MOD(M) = M - INT(M / 8) * 8
|
|
30 REM SIN, COS in arrays for PI/4 multipl.
|
|
40 DIM S(7), C(7)
|
|
50 QPI = ATN(1): SQ = SQR(2)
|
|
60 FOR I = 0 TO 7
|
|
70 S(I) = SIN(I * QPI): C(I) = COS(I * QPI)
|
|
80 NEXT I
|
|
90 LEVEL = 15
|
|
100 INSIZE = 128: REM 2^WHOLE_NUM (looks better)
|
|
110 X = 98: Y = 68
|
|
120 ROTQPI = 0: RQ = 1
|
|
130 DIM R(LEVEL)
|
|
140 HGR2: HCOLOR = 1
|
|
150 GOSUB 170
|
|
160 END
|
|
170 REM ** Dragon
|
|
180 ROTQPI = FN MOD8(ROTQPI)
|
|
190 IF LEVEL > 1 THEN GOTO 250
|
|
200 YN = S(ROTQPI) * INSIZE + Y
|
|
210 XN = C(ROTQPI) * INSIZE + X
|
|
220 HPLOT X, Y TO XN, YN
|
|
230 X = XN: Y = YN
|
|
240 RETURN
|
|
250 INSIZE = INSIZE * SQ / 2
|
|
260 ROTQPI = FN MOD8(ROTQPI + RQ)
|
|
270 LEVEL = LEVEL - 1
|
|
280 R(LEVEL) = RQ: RQ = 1
|
|
290 GOSUB 170
|
|
300 ROTQPI = FN MOD8(ROTQPI - R(LEVEL) * 2)
|
|
310 RQ = -1
|
|
320 GOSUB 170
|
|
330 RQ = R(LEVEL)
|
|
340 ROTQPI = FN MOD8(ROTQPI + RQ)
|
|
350 LEVEL = LEVEL + 1
|
|
360 INSIZE = INSIZE * SQ
|
|
370 RETURN
|