56 lines
1.1 KiB
Text
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
|