Dragon curve: Difference between revisions

Content added Content deleted
(→‎{{header|GW-BASIC}}: Doubled x-coords for better look in SCREEN 2. Structure: IF-THEN-ELSE used.)
(→‎{{header|GW-BASIC}}: ... MOD 8 (originally realized by nested IFs) replaced by bitwise operations (... AND 7).)
Line 803: Line 803:
{{works with|BASICA}}
{{works with|BASICA}}
{{works with|QBasic}}
{{works with|QBasic}}
{{trans|Commodore BASIC|<code>... MOD 8</code> (originally realized by nested <code>IF</code>s) replaced by bitwise operations (<code>... AND 7</code>).}}
{{trans|Commodore BASIC}}
<syntaxhighlight lang="qbasic">10 REM Dragon curve
<syntaxhighlight lang="qbasic">10 REM Dragon curve
20 REM SIN, COS in arrays for PI/4 multipl.
20 REM SIN, COS in arrays for PI/4 multipl.
Line 812: Line 812:
70 C(I) = COS(I * QPI)
70 C(I) = COS(I * QPI)
80 NEXT I
80 NEXT I
90 LEVEL = 15
90 LEVEL% = 15
100 INSIZE = 128: REM 2^WHOLE_NUM (looks better)
100 INSIZE = 128: REM 2^WHOLE_NUM (looks better)
110 X = 112
110 X = 112
120 Y = 70
120 Y = 70
130 SQ = SQR(2)
130 SQ = SQR(2)
140 ROTQPI = 0: ITER = 0: RQ = 1
140 ROTQPI% = 0: ITER% = 0: RQ% = 1
150 DIM R(LEVEL)
150 DIM R%(LEVEL%)
160 SCREEN 2: CLS
160 SCREEN 2: CLS
170 GOSUB 190
170 GOSUB 190
180 END
180 END
190 REM ** Dragon
190 REM ** Dragon
200 IF ROTQPI < 0 THEN ROTQPI = ROTQPI + 8 ELSE IF ROTQPI > 7 THEN ROTQPI = ROTQPI - 8
200 ROTQPI% = ROTQPI% AND 7
210 IF LEVEL > 1 THEN GOTO 280
210 IF LEVEL% > 1 THEN GOTO 280
220 YN = S(ROTQPI) * INSIZE + Y
220 YN = S(ROTQPI%) * INSIZE + Y
230 XN = C(ROTQPI) * INSIZE + X
230 XN = C(ROTQPI%) * INSIZE + X
240 LINE (2 * X, Y)-(2 * XN, YN): REM For SCREEN 2 doubled x-coords
240 LINE (2 * X, Y)-(2 * XN, YN): REM For SCREEN 2 doubled x-coords
250 ITER = ITER + 1
250 ITER% = ITER% + 1
260 X = XN: Y = YN
260 X = XN: Y = YN
270 RETURN
270 RETURN
280 INSIZE = INSIZE * SQ / 2
280 INSIZE = INSIZE * SQ / 2
290 ROTQPI = ROTQPI + RQ
290 ROTQPI% = (ROTQPI% + RQ%) AND 7
300 LEVEL% = LEVEL% - 1
300 IF ROTQPI < 0 THEN ROTQPI = ROTQPI + 8 ELSE IF ROTQPI > 7 THEN ROTQPI = ROTQPI - 8
310 LEVEL = LEVEL - 1
310 R%(LEVEL%) = RQ%: RQ% = 1
320 GOSUB 190
320 R(LEVEL) = RQ: RQ = 1
330 ROTQPI% = (ROTQPI% - R%(LEVEL%) * 2) AND 7
330 GOSUB 190
340 ROTQPI = ROTQPI - R(LEVEL) * 2
340 RQ% = -1
350 GOSUB 190
350 IF ROTQPI < 0 THEN ROTQPI = ROTQPI + 8 ELSE IF ROTQPI > 7 THEN ROTQPI = ROTQPI - 8
360 RQ = -1
360 RQ% = R%(LEVEL%)
370 ROTQPI% = (ROTQPI% + RQ%) AND 7
370 GOSUB 190
380 RQ = R(LEVEL)
380 LEVEL% = LEVEL% + 1
390 ROTQPI = ROTQPI + RQ
390 INSIZE = INSIZE * SQ
400 RETURN</syntaxhighlight>
400 IF ROTQPI < 0 THEN ROTQPI = ROTQPI + 8 ELSE IF ROTQPI > 7 THEN ROTQPI = ROTQPI - 8
410 LEVEL = LEVEL + 1
420 INSIZE = INSIZE * SQ
430 RETURN</syntaxhighlight>


==={{header|IS-BASIC}}===
==={{header|IS-BASIC}}===