Dragon curve: Difference between revisions

→‎{{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.
(→‎{{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:
90 x = 224 : y = 140
100 sq = sqr(2)
110 rotqpi = 0 : iter = 0 : rq = 1
120 dim r(level)
130 graphics 0 : graphics cls
Line 675:
150 end
160 rem Dragon
170 if rotqpi <= 0rotqpi thenand 7
180 if level rotqpi <= rotqpi+81 then
190 yn = s(rotqpi)*insize+y
190 else
200 if rotqpi > 7 then rotqpixn = c(rotqpi-8)*insize+x
210 graphics moveto x,y : graphics lineto xn,yn
210 endif
220 if level >x 1= thenxn goto: 290y = yn
230 else
230 yn = s(rotqpi)*insize+y
240 xn insize = c(rotqpi)*insize+x*sq/2
250 rotqpi = (rotqpi+rq) and 7
250 graphics moveto x,y : graphics lineto xn,yn
260 iter level = iter+level-1
270 x r(level) = xnrq : yrq = yn1
280 return gosub 160
290 insize rotqpi = insize(rotqpi-r(level)*sq/2) and 7
300 rotqpi = rotqpi+rq = -1
310 if rotqpi < 0 thengosub 160
320 rotqpirq = rotqpi+8r(level)
330 rotqpi = (rotqpi+rq) and 7
330 else
340 if rotqpi > 7 then rotqpilevel = rotqpi-8level+1
350 insize = insize*sq
350 endif
360 level = level-1endif
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>
 
Line 725 ⟶ 706:
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
70 C(I)=COS(I*QPI)
80 NEXT ILEVEL=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 XROTQPI=1120:RQ=1
120 Y=70DIM R(LEVEL)
130 SQ=SQR(GRAPHIC 2),1
140 GOSUB 160
140 ROTQPI=0:ITER=0:RQ=1
150 DIM R(LEVEL)END
160 GRAPHICREM 2,1DRAGON
170 GOSUBROTQPI=ROTQPI 190AND 7
180 IF LEVEL>1 THEN GO TO 240
180 END
190 YN=S(ROTQPI)*INSIZE+Y
190 REM DRAGON
200 IF ROTQPI<0 THEN ROTQPIXN=C(ROTQPI)*INSIZE+8:GOTO 220X
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 XNINSIZE=C(ROTQPI)*INSIZE+X*SQ/2
250 ROTQPI=(ROTQPI+RQ)AND 7
250 DRAW ,X,Y TO XN,YN
260 ITERLEVEL=ITER+LEVEL-1
270 XR(LEVEL)=XNRQ:YRQ=YN1
280 RETURNGOSUB 160
290 ROTQPI=(ROTQPI-R(LEVEL)*2)AND 7
290 INSIZE=INSIZE*SQ/2
300 ROTQPI=ROTQPI+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 R(LEVEL)=RQ:RQ=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>
 
Line 803 ⟶ 773:
{{works with|BASICA}}
{{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
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 C(I)NEXT = COS(I * QPI)
80 NEXTLEVEL% I= 15
90 INSIZE = 128: REM 2^WHOLE_NUM (looks better)
90 LEVEL% = 15
100 INSIZEX = 128112: REMY 2^WHOLE_NUM (looks= better)70
110 XROTQPI% = 1120: RQ% = 1
120 YDIM = 70R%(LEVEL%)
130 SQSCREEN = SQR(2): CLS
140 GOSUB 160
140 ROTQPI% = 0: ITER% = 0: RQ% = 1
150 DIM R%(LEVEL%)END
160 SCREENREM 2:** CLSDragon
170 ROTQPI% = ROTQPI% AND 7
170 GOSUB 190
180 IF LEVEL% > 1 THEN GOTO 240
180 END
190 REMYN = S(ROTQPI%) ** DragonINSIZE + Y
200 ROTQPI%XN = C(ROTQPI%) * INSIZE AND+ 7X
210 LINE (2 * X, Y)-(2 * XN, YN): REM For SCREEN 2 doubled x-coords
210 IF LEVEL% > 1 THEN GOTO 280
220 YNX = S(ROTQPI%)XN: *Y INSIZE= + YYN
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 ITERROTQPI% = ITER(ROTQPI% + 1RQ%) AND 7
260 XLEVEL% = XN:LEVEL% Y- = YN1
270 R%(LEVEL%) = RQ%: RQ% = 1
270 RETURN
280 GOSUB 160
280 INSIZE = INSIZE * SQ / 2
290 ROTQPI% = (ROTQPI% +- RQR%(LEVEL%) * 2) AND 7
300 LEVELRQ% = LEVEL% - 1
310 GOSUB 160
310 R%(LEVEL%) = RQ%: RQ% = 1
320 GOSUBRQ% 190= R%(LEVEL%)
330 ROTQPI% = (ROTQPI% -+ RRQ%(LEVEL%) * 2) AND 7
340 RQLEVEL% = -LEVEL% + 1
350 GOSUBINSIZE 190= 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}}===
Line 930 ⟶ 896:
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
70 C(I)=COS(I*QPI)
80 NEXT ILEVEL=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 XROTQPI=800:RQ=1
120 Y=70DIM R(LEVEL)
130 SQ=SQR(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 OPEN "GRP:" FOR OUTPUT ASCLOSE #1
190 END
190 DRAW "BM 0,184":PRINT #1,"Hit any key to exit."
200 REM Dragon
200 IF INKEY$="" THEN 200
210 CLOSEROTQPI=ROTQPI #1AND 7
220 IF LEVEL>1 THEN GOTO 280
220 END
230 YN=S(ROTQPI)*INSIZE+Y
230 REM Dragon
240 IF ROTQPI<0 THEN ROTQPIXN=C(ROTQPI)*INSIZE+8:GOTO 260X
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 XNINSIZE=C(ROTQPI)*INSIZE+X*SQ/2
290 LINE ROTQPI=(X,Y)-(XN,YNROTQPI+RQ)AND 7
300 ITERLEVEL=ITER+LEVEL-1
310 XR(LEVEL)=XNRQ:YRQ=YN1
320 RETURNGOSUB 200
330 ROTQPI=(ROTQPI-R(LEVEL)*2)AND 7
330 INSIZE=INSIZE*SQ/2
340 ROTQPI=ROTQPI+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 R(LEVEL)=RQ:RQ=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>
 
Line 1,406 ⟶ 1,361:
<syntaxhighlight lang="zxbasic">10 LET level=15: LET insize=120
20 LET x=80: LET y=70
30 LET iterssq=SQR (2^level): LET qpi=PI/4
40 LET qiterrotation=256/iters0: 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 DIMREM r(level)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
110120 LET xnx=COSxn: (rotation)*insize+xLET y=yn
130 RETURN
120 PLOT x,y: DRAW xn-x,yn-y
130140 LET iterinsize=iter+1insize/sq
150 LET rotation=rotation+rq*qpi
140 LET x=xn: LET y=yn
160 LET level=level-1
150 RETURN
200170 LET insizer(level)=insize/sqrq: LET rq=1
180 GO SUB 70
210 LET rotation=rotation+rq*qpi
220190 LET levelrotation=rotation-r(level-1)*qpi*2
230 LET r(level)=rq:200 LET rq=-1
240210 GO SUB 8070
250220 LET rotationrq=rotation-r(level)*qpi*2
230 LET rotation=rotation+rq*qpi
260 LET rq=-1
240 LET level=level+1
270 GO SUB 80
280250 LET rqinsize=r(level)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}}==
512

edits