RosettaCodeData/Task/Dragon-curve/Applesoft-BASIC/dragon-curve.basic
2025-02-27 18:35:13 -05:00

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