41 lines
857 B
Plaintext
41 lines
857 B
Plaintext
10 REM Dragon curve
|
|
20 REM SIN, COS in arrays for PI/4 multipl.
|
|
30 DIM S(7),C(7)
|
|
40 QPI=ATN(1):SQ=SQR(2)
|
|
50 FOR I=0 TO 7
|
|
60 S(I)=SIN(I*QPI):C(I)=COS(I*QPI)
|
|
70 NEXT I
|
|
80 LEVEL=15
|
|
90 INSIZE=128:REM 2^WHOLE_NUM (looks better)
|
|
100 X=80:Y=70
|
|
110 ROTQPI=0:RQ=1
|
|
120 DIM R(LEVEL)
|
|
130 SCREEN 2
|
|
140 GOSUB 200
|
|
150 OPEN "GRP:" FOR OUTPUT AS #1
|
|
160 DRAW "BM 0,184":PRINT #1,"Hit any key to exit."
|
|
170 IF INKEY$="" THEN 170
|
|
180 CLOSE #1
|
|
190 END
|
|
200 REM Dragon
|
|
210 ROTQPI=ROTQPI AND 7
|
|
220 IF LEVEL>1 THEN GOTO 280
|
|
230 YN=S(ROTQPI)*INSIZE+Y
|
|
240 XN=C(ROTQPI)*INSIZE+X
|
|
250 LINE (X,Y)-(XN,YN)
|
|
260 X=XN:Y=YN
|
|
270 RETURN
|
|
280 INSIZE=INSIZE*SQ/2
|
|
290 ROTQPI=(ROTQPI+RQ)AND 7
|
|
300 LEVEL=LEVEL-1
|
|
310 R(LEVEL)=RQ:RQ=1
|
|
320 GOSUB 200
|
|
330 ROTQPI=(ROTQPI-R(LEVEL)*2)AND 7
|
|
340 RQ=-1
|
|
350 GOSUB 200
|
|
360 RQ=R(LEVEL)
|
|
370 ROTQPI=(ROTQPI+RQ)AND 7
|
|
380 LEVEL=LEVEL+1
|
|
390 INSIZE=INSIZE*SQ
|
|
400 RETURN
|