PROGRAM koch ! improved output 8/9/95 by computing aspect ratio ! generate triadic Koch curve using recursion LIBRARY "csgraphics" CALL initial(x1,y1,x2,y2,n) ! draw Koch curve for different number of iterations DO LET k = 0 CALL draw(x1,y1,x2,y2,n) DO ! pause until any key is hit GET KEY k LOOP UNTIL k <> 0 LET n = n + 1 ! number of stages of generation CLEAR LOOP UNTIL k = ord("s") END SUB initial(x1,y1,x2,y2,n) LET n = 0 ! number of iterations LET x1 = 1 ! coordinates at left end of line LET y1 = 5 ! arbitrary units LET x2 = 10 ! coordinates at right end of line LET y2 = 5 CALL compute_aspect_ratio(8,xwin,ywin) SET WINDOW 0,xwin,0,ywin ASK MAX COLOR mc IF mc > 2 then SET COLOR "blue" END SUB SUB draw(x1,y1,x2,y2,n) IF n > 0 then LET dx = (x2 - x1)/3 LET dy = (y2 - y1)/3 LET x1n = x1 + dx LET y1n = y1 + dy LET x2n = x1 + 2*dx LET y2n = y1 + 2*dy ! rotate line segment (dx,dy) by 60 degs and add to (x1n,y1n) LET xmid = 0.5*dx - 0.866*dy + x1n LET ymid = 0.5*dy + 0.866*dx + y1n CALL draw(x1,y1,x1n,y1n,n-1) CALL draw(x1n,y1n,xmid,ymid,n-1) CALL draw(xmid,ymid,x2n,y2n,n-1) CALL draw(x2n,y2n,x2,y2,n-1) ELSE PLOT LINES: x1,y1;x2,y2 END IF END SUB