Dragon curve: Difference between revisions
Content deleted Content added
→{{header|BASIC}}: In the direct and indirect translations of BASIC256, removed the unnecessary variable ITER (in BASIC256 it serves for colors). In Commodore BASIC and its translations, replaced num MOD 8 (previously realized by nested IFs) by bitwise num AND 7. |
|||
Line 669: | Line 669: | ||
90 x = 224 : y = 140 |
90 x = 224 : y = 140 |
||
100 sq = sqr(2) |
100 sq = sqr(2) |
||
110 rotqpi |
110 rotqpi = 0 : rq = 1 |
||
120 dim r(level) |
120 dim r(level) |
||
130 graphics 0 : graphics cls |
130 graphics 0 : graphics cls |
||
Line 675: | Line 675: | ||
150 end |
150 end |
||
160 rem Dragon |
160 rem Dragon |
||
170 |
170 rotqpi = rotqpi and 7 |
||
180 |
180 if level <= 1 then |
||
190 yn = s(rotqpi)*insize+y |
|||
190 else |
|||
200 |
200 xn = c(rotqpi)*insize+x |
||
210 graphics moveto x,y : graphics lineto xn,yn |
|||
210 endif |
|||
220 |
220 x = xn : y = yn |
||
230 else |
|||
230 yn = s(rotqpi)*insize+y |
|||
240 |
240 insize = insize*sq/2 |
||
250 rotqpi = (rotqpi+rq) and 7 |
|||
250 graphics moveto x,y : graphics lineto xn,yn |
|||
260 |
260 level = level-1 |
||
270 |
270 r(level) = rq : rq = 1 |
||
280 |
280 gosub 160 |
||
290 |
290 rotqpi = (rotqpi-r(level)*2) and 7 |
||
300 |
300 rq = -1 |
||
310 |
310 gosub 160 |
||
320 |
320 rq = r(level) |
||
330 rotqpi = (rotqpi+rq) and 7 |
|||
330 else |
|||
340 |
340 level = level+1 |
||
350 insize = insize*sq |
|||
350 endif |
|||
360 |
360 endif |
||
370 return |
|||
370 r(level) = rq : rq = 1 |
|||
380 gosub 160 |
|||
390 rotqpi = rotqpi-r(level)*2 |
|||
400 if rotqpi < 0 then |
|||
410 rotqpi = rotqpi+8 |
|||
420 else |
|||
430 if rotqpi > 7 then rotqpi = rotqpi-8 |
|||
440 endif |
|||
450 rq = -1 |
|||
460 gosub 160 |
|||
470 rq = r(level) |
|||
480 rotqpi = rotqpi+rq |
|||
490 if rotqpi < 0 then |
|||
500 rotqpi = rotqpi+8 |
|||
510 else |
|||
520 if rotqpi > 7 then rotqpi = rotqpi-8 |
|||
530 endif |
|||
540 level = level+1 |
|||
550 insize = insize*sq |
|||
560 return |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Line 725: | Line 706: | ||
20 REM SIN, COS IN ARRAYS FOR PI/4 MULTIPL. |
20 REM SIN, COS IN ARRAYS FOR PI/4 MULTIPL. |
||
30 DIM S(7),C(7) |
30 DIM S(7),C(7) |
||
40 QPI=ATN(1) |
40 QPI=ATN(1):SQ=SQR(2) |
||
50 FOR I=0 TO 7 |
50 FOR I=0 TO 7 |
||
60 S(I)=SIN(I*QPI) |
60 S(I)=SIN(I*QPI):C(I)=COS(I*QPI) |
||
70 NEXT I |
|||
70 C(I)=COS(I*QPI) |
|||
80 |
80 LEVEL=15 |
||
90 INSIZE=128:REM 2^WHOLE_NUM (LOOKS BETTER) |
|||
90 LEVEL=15 |
|||
100 X=112:Y=70 |
|||
100 INSIZE=128:REM 2^WHOLE_NUM (LOOKS BETTER) |
|||
110 |
110 ROTQPI=0:RQ=1 |
||
120 |
120 DIM R(LEVEL) |
||
130 |
130 GRAPHIC 2,1 |
||
140 GOSUB 160 |
|||
140 ROTQPI=0:ITER=0:RQ=1 |
|||
150 |
150 END |
||
160 |
160 REM DRAGON |
||
170 |
170 ROTQPI=ROTQPI AND 7 |
||
180 IF LEVEL>1 THEN GO TO 240 |
|||
180 END |
|||
190 YN=S(ROTQPI)*INSIZE+Y |
|||
190 REM DRAGON |
|||
200 |
200 XN=C(ROTQPI)*INSIZE+X |
||
210 DRAW ,X,Y TO XN,YN |
|||
210 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
220 X=XN:Y=YN |
|||
220 IF LEVEL>1 THEN GO TO 290 |
|||
230 RETURN |
|||
230 YN=S(ROTQPI)*INSIZE+Y |
|||
240 |
240 INSIZE=INSIZE*SQ/2 |
||
250 ROTQPI=(ROTQPI+RQ)AND 7 |
|||
250 DRAW ,X,Y TO XN,YN |
|||
260 |
260 LEVEL=LEVEL-1 |
||
270 |
270 R(LEVEL)=RQ:RQ=1 |
||
280 |
280 GOSUB 160 |
||
290 ROTQPI=(ROTQPI-R(LEVEL)*2)AND 7 |
|||
290 INSIZE=INSIZE*SQ/2 |
|||
300 |
300 RQ=-1 |
||
310 GOSUB 160 |
|||
310 IF ROTQPI<0 THEN ROTQPI=ROTQPI+8:GOTO 330 |
|||
320 RQ=R(LEVEL) |
|||
320 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
330 ROTQPI=(ROTQPI+RQ)AND 7 |
|||
330 LEVEL=LEVEL-1 |
|||
340 |
340 LEVEL=LEVEL+1 |
||
350 INSIZE=INSIZE*SQ |
|||
350 GOSUB 190 |
|||
360 RETURN |
|||
360 ROTQPI=ROTQPI-R(LEVEL)*2 |
|||
370 IF ROTQPI<0 THEN ROTQPI=ROTQPI+8:GOTO 390 |
|||
380 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
390 RQ=-1 |
|||
400 GOSUB 190 |
|||
410 RQ=R(LEVEL) |
|||
420 ROTQPI=ROTQPI+RQ |
|||
430 IF ROTQPI<0 THEN ROTQPI=ROTQPI+8:GOTO 450 |
|||
440 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
450 LEVEL=LEVEL+1 |
|||
460 INSIZE=INSIZE*SQ |
|||
470 RETURN |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Line 803: | Line 773: | ||
{{works with|BASICA}} |
{{works with|BASICA}} |
||
{{works with|QBasic}} |
{{works with|QBasic}} |
||
{{trans|Commodore BASIC}} |
|||
{{trans|Commodore BASIC|<code>... MOD 8</code> (originally realized by nested <code>IF</code>s) replaced by bitwise operations (<code>... AND 7</code>).}} |
|||
<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. |
||
30 DIM S(7), C(7) |
30 DIM S(7), C(7) |
||
40 QPI = ATN(1) |
40 QPI = ATN(1): SQ = SQR(2) |
||
50 FOR I = 0 TO 7 |
50 FOR I = 0 TO 7 |
||
60 S(I) = SIN(I * QPI) |
60 S(I) = SIN(I * QPI): C(I) = COS(I * QPI) |
||
70 |
70 NEXT I |
||
80 |
80 LEVEL% = 15 |
||
90 INSIZE = 128: REM 2^WHOLE_NUM (looks better) |
|||
90 LEVEL% = 15 |
|||
100 |
100 X = 112: Y = 70 |
||
110 |
110 ROTQPI% = 0: RQ% = 1 |
||
120 |
120 DIM R%(LEVEL%) |
||
130 |
130 SCREEN 2: CLS |
||
140 GOSUB 160 |
|||
140 ROTQPI% = 0: ITER% = 0: RQ% = 1 |
|||
150 |
150 END |
||
160 |
160 REM ** Dragon |
||
170 ROTQPI% = ROTQPI% AND 7 |
|||
170 GOSUB 190 |
|||
180 IF LEVEL% > 1 THEN GOTO 240 |
|||
180 END |
|||
190 |
190 YN = S(ROTQPI%) * INSIZE + Y |
||
200 |
200 XN = C(ROTQPI%) * INSIZE + X |
||
210 LINE (2 * X, Y)-(2 * XN, YN): REM For SCREEN 2 doubled x-coords |
|||
210 IF LEVEL% > 1 THEN GOTO 280 |
|||
220 |
220 X = XN: Y = YN |
||
230 RETURN |
|||
230 XN = C(ROTQPI%) * INSIZE + X |
|||
240 INSIZE = INSIZE * SQ / 2 |
|||
240 LINE (2 * X, Y)-(2 * XN, YN): REM For SCREEN 2 doubled x-coords |
|||
250 |
250 ROTQPI% = (ROTQPI% + RQ%) AND 7 |
||
260 |
260 LEVEL% = LEVEL% - 1 |
||
270 R%(LEVEL%) = RQ%: RQ% = 1 |
|||
270 RETURN |
|||
280 GOSUB 160 |
|||
280 INSIZE = INSIZE * SQ / 2 |
|||
290 ROTQPI% = (ROTQPI% |
290 ROTQPI% = (ROTQPI% - R%(LEVEL%) * 2) AND 7 |
||
300 |
300 RQ% = -1 |
||
310 GOSUB 160 |
|||
310 R%(LEVEL%) = RQ%: RQ% = 1 |
|||
320 |
320 RQ% = R%(LEVEL%) |
||
330 ROTQPI% = (ROTQPI% |
330 ROTQPI% = (ROTQPI% + RQ%) AND 7 |
||
340 |
340 LEVEL% = LEVEL% + 1 |
||
350 |
350 INSIZE = INSIZE * SQ |
||
360 RETURN</syntaxhighlight> |
|||
360 RQ% = R%(LEVEL%) |
|||
370 ROTQPI% = (ROTQPI% + RQ%) AND 7 |
|||
380 LEVEL% = LEVEL% + 1 |
|||
390 INSIZE = INSIZE * SQ |
|||
400 RETURN</syntaxhighlight> |
|||
==={{header|IS-BASIC}}=== |
==={{header|IS-BASIC}}=== |
||
Line 930: | Line 896: | ||
20 REM SIN, COS in arrays for PI/4 multipl. |
20 REM SIN, COS in arrays for PI/4 multipl. |
||
30 DIM S(7),C(7) |
30 DIM S(7),C(7) |
||
40 QPI=ATN(1) |
40 QPI=ATN(1):SQ=SQR(2) |
||
50 FOR I=0 TO 7 |
50 FOR I=0 TO 7 |
||
60 S(I)=SIN(I*QPI) |
60 S(I)=SIN(I*QPI):C(I)=COS(I*QPI) |
||
70 NEXT I |
|||
70 C(I)=COS(I*QPI) |
|||
80 |
80 LEVEL=15 |
||
90 INSIZE=128:REM 2^WHOLE_NUM (looks better) |
|||
90 LEVEL=15 |
|||
100 X=80:Y=70 |
|||
100 INSIZE=128:REM 2^WHOLE_NUM (looks better) |
|||
110 |
110 ROTQPI=0:RQ=1 |
||
120 |
120 DIM R(LEVEL) |
||
130 |
130 SCREEN 2 |
||
140 GOSUB 200 |
|||
140 ROTQPI=0:ITER=0:RQ=1 |
|||
150 OPEN "GRP:" FOR OUTPUT AS #1 |
|||
150 DIM R(LEVEL) |
|||
160 DRAW "BM 0,184":PRINT #1,"Hit any key to exit." |
|||
160 SCREEN 2 |
|||
170 IF INKEY$="" THEN 170 |
|||
170 GOSUB 230 |
|||
180 |
180 CLOSE #1 |
||
190 END |
|||
190 DRAW "BM 0,184":PRINT #1,"Hit any key to exit." |
|||
200 REM Dragon |
|||
200 IF INKEY$="" THEN 200 |
|||
210 |
210 ROTQPI=ROTQPI AND 7 |
||
220 IF LEVEL>1 THEN GOTO 280 |
|||
220 END |
|||
230 YN=S(ROTQPI)*INSIZE+Y |
|||
230 REM Dragon |
|||
240 |
240 XN=C(ROTQPI)*INSIZE+X |
||
250 LINE (X,Y)-(XN,YN) |
|||
250 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
260 X=XN:Y=YN |
|||
260 IF LEVEL>1 THEN GOTO 330 |
|||
270 RETURN |
|||
270 YN=S(ROTQPI)*INSIZE+Y |
|||
280 |
280 INSIZE=INSIZE*SQ/2 |
||
290 |
290 ROTQPI=(ROTQPI+RQ)AND 7 |
||
300 |
300 LEVEL=LEVEL-1 |
||
310 |
310 R(LEVEL)=RQ:RQ=1 |
||
320 |
320 GOSUB 200 |
||
330 ROTQPI=(ROTQPI-R(LEVEL)*2)AND 7 |
|||
330 INSIZE=INSIZE*SQ/2 |
|||
340 |
340 RQ=-1 |
||
350 GOSUB 200 |
|||
350 IF ROTQPI<0 THEN ROTQPI=ROTQPI+8:GOTO 370 |
|||
360 RQ=R(LEVEL) |
|||
360 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
370 ROTQPI=(ROTQPI+RQ)AND 7 |
|||
370 LEVEL=LEVEL-1 |
|||
380 |
380 LEVEL=LEVEL+1 |
||
390 INSIZE=INSIZE*SQ |
|||
390 GOSUB 230 |
|||
400 RETURN |
|||
400 ROTQPI=ROTQPI-R(LEVEL)*2 |
|||
410 IF ROTQPI<0 THEN ROTQPI=ROTQPI+8:GOTO 430 |
|||
420 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
430 RQ=-1 |
|||
440 GOSUB 230 |
|||
450 RQ=R(LEVEL) |
|||
460 ROTQPI=ROTQPI+RQ |
|||
470 IF ROTQPI<0 THEN ROTQPI=ROTQPI+8:GOTO 490 |
|||
480 IF ROTQPI>7 THEN ROTQPI=ROTQPI-8 |
|||
490 LEVEL=LEVEL+1 |
|||
500 INSIZE=INSIZE*SQ |
|||
510 RETURN |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Line 1,406: | Line 1,361: | ||
<syntaxhighlight lang="zxbasic">10 LET level=15: LET insize=120 |
<syntaxhighlight lang="zxbasic">10 LET level=15: LET insize=120 |
||
20 LET x=80: LET y=70 |
20 LET x=80: LET y=70 |
||
30 LET |
30 LET sq=SQR (2): LET qpi=PI/4 |
||
40 LET |
40 LET rotation=0: LET rq=1 |
||
50 DIM r(level) |
|||
50 LET sq=SQR (2): LET qpi=PI/4 |
|||
60 GO SUB 70: STOP |
|||
60 LET rotation=0: LET iter=0: LET rq=1 |
|||
70 |
70 REM Dragon |
||
80 IF level>1 THEN GO TO 140 |
|||
75 GO SUB 80: STOP |
|||
90 LET yn=SIN (rotation)*insize+y |
|||
80 REM Dragon |
|||
100 LET xn=COS (rotation)*insize+x |
|||
90 IF level>1 THEN GO TO 200 |
|||
110 PLOT x,y: DRAW xn-x,yn-y |
|||
100 LET yn=SIN (rotation)*insize+y |
|||
120 LET x=xn: LET y=yn |
|||
130 RETURN |
|||
120 PLOT x,y: DRAW xn-x,yn-y |
|||
140 LET insize=insize/sq |
|||
150 LET rotation=rotation+rq*qpi |
|||
140 LET x=xn: LET y=yn |
|||
160 LET level=level-1 |
|||
150 RETURN |
|||
170 LET r(level)=rq: LET rq=1 |
|||
180 GO SUB 70 |
|||
210 LET rotation=rotation+rq*qpi |
|||
190 LET rotation=rotation-r(level)*qpi*2 |
|||
200 LET rq=-1 |
|||
210 GO SUB 70 |
|||
220 LET rq=r(level) |
|||
230 LET rotation=rotation+rq*qpi |
|||
260 LET rq=-1 |
|||
240 LET level=level+1 |
|||
270 GO SUB 80 |
|||
250 LET insize=insize*sq |
|||
260 RETURN </syntaxhighlight> |
|||
290 LET rotation=rotation+rq*qpi |
|||
300 LET level=level+1 |
|||
310 LET insize=insize*sq |
|||
320 RETURN </syntaxhighlight> |
|||
=={{header|Befunge}}== |
=={{header|Befunge}}== |