RosettaCodeData/Task/Koch-curve/Locomotive-Basic/koch-curve.basic
2026-04-30 12:34:36 -04:00

56 lines
1.1 KiB
Text

100 MODE 2
110 DEG
120 level=4
130 DIM alevel(level+1), alength(level+1), astate(level+1)
140 length = 300
150 angle = 0
160 x = 160: y = 120
170 MOVE x, y
180 '
190 ' draw 3 sides/Koch curves
200 FOR i = 1 TO 3
210 'initialize stack
220 sp = 1
230 alevel(sp) = level
240 alength(sp) = length
250 astate(sp) = 0
260 GOSUB 320
270 angle = angle - 120
280 NEXT i
290 END
300 '
310 ' iterative Koch using stack
320 WHILE sp > 0
330 level = alevel(sp)
340 length = alength(sp)
350 state = astate(sp)
360 IF level = 0 THEN GOSUB 410 ELSE ON state+1 GOSUB 480,560,600,560,640
370 WEND
380 RETURN
390 '
400 ' draw forward
410 x = x + length * COS(angle)
420 y = y - length * SIN(angle)
430 DRAW x, y
440 sp = sp - 1
450 RETURN
460 '
470 ' F (state 0, partly 1,2,3)
480 astate(sp) = state + 1
490 sp = sp + 1
500 alevel(sp) = level - 1
510 alength(sp) = length / 3
520 astate(sp) = 0
530 RETURN
540 '
550 ' +F (state 1, 3)
560 angle = angle + 60
570 GOTO 480
580 '
590 ' --F (state 2)
600 angle = angle - 120
610 GOTO 480
620 '
630 ' done (state 4)
640 sp = sp - 1
650 RETURN