See all articles from T-S Horizons n17
Program to generate fractal landscapes.



5 REM Fractals\n6 REM T. A. Knyszek\n7 REM T-S Horizons n17 p19\n10 REM Converted from Apple II to TS-2068 by Ted Knyszek\n15 BORDER 1: PAPER 5: INK 0: PRINT: CLS\n20 DIM D(65,33)\n30 INPUT "NUMBER OF LEVELS (1-6)";LE\n40 LET DS=2^LE+1\n50 LET MX=DS-1: LET MY=MX/2: LET RH=PI/6: LET VT=-PI/5\n51 LET RC=COS (RH): LET RS=SIN(RH)\n52 LET VC=COS(VT): LET VS=SIN(VT)\n60 FOR N=1 TO LE: LET L=10000/1.8^N\n70 PRINT #1;AT 0,0;"WORKING ON LEVEL ";N\n80 LET IB=MX/2^N:LET SK=IB*2\n90 GO SUB 150: REM ASSIGN HEIGHTS ALONG X IN ARRAY\n100 GO SUB 220: REM ASSIGN HEIGHTS ALONG Y IN ARRAY\n110 GO SUB 290: REM ASSIGN HEIGHTS ALONG DIAG IN ARRAY\n120 NEXT N\n130 GO TO 640\n140 REM HEIGHTS ALONG X\n150 FOR T=0 TO MX-1 STEP SK\n160 FOR K=IB+T TO MX STEP SK\n170 LET I=K-IB: LET J=T: GO SUB 370: LET D1=D: LET I=K+IB: GO SUB 370: LET D2=D\n180 LET D=(D1+D2)/2+(RND-.5)*L/2: LET I=K: LET J=T: GO SUB 420\n190 NEXT K\n200 NEXT T: RETURN\n210 REM HEIGHTS ALONG X\n220 FOR K=MX TO 1 STEP -SK\n230 FOR T=IB TO K STEP SK\n240 LET I=K: LET J=T+IB: GO SUB 370: LET D1=D: LET J=T-IB: GO SUB 370: LET D2=D\n250 LET D=(D1+D2)/2+(RND-.5)*L/2: LET I=K: LET J=T: GO SUB 420\n260 NEXT T\n270 NEXT K: RETURN\n280 REM HEIGHTS ALONG DIAG\n290 FOR K=0 TO MX-1 STEP SK\n300 FOR T=IB TO MX-K STEP SK\n310 LET I=K+T-IB: LET J=T-IB: GO SUB 370: LET D1=D\n320 LET I=K+T+IB: LET J=T+IB: GO SUB 370: LET D2=D\n330 LET I=K+T: LET J=T: LET D=(D1+D2)/2+(RND-.5)*L/2: GO SUB 420\n340 NEXT T\n350 NEXT K: RETURN\n360 REM RETURN DATA FROM ARRAY\n370 IF J>MY THEN GO TO 390\n380 LET BY=J: LET BX=I: GO TO 400\n390 LET BY=MX+1-J: LET BX=MX-I\n400 LET D=D(BX+1,BY+1): RETURN\n410 REM PUT DATA IN ARRAY\n420 IF J>MY THEN GO TO 440\n430 LET BY=J: LET BX=I: GO TO 450\n440 LET BY=MX+1-J: LET BX=MX-I\n450 LET D(BX+1,BY+1)=D: RETURN\n460 REM PUT IN SEA LEVEL HERE\n470 IF XO<>-999 THEN GO TO 500\n480 IF ZZ<0 THEN GO SUB 1070: LET Z2=ZZ: LET ZZ=0: GO TO 620\n490 GO SUB 1090: GO TO 610\n500 IF Z2>0 AND ZZ>0 THEN GO TO 610\n510 IF Z2<0 AND ZZ<0 THEN LET Z2=ZZ: LET ZZ=0: GO TO 620\n520 LET W3=ZZ/(ZZ-Z2): LET X3=(X2-XX)*W3+XX: LET Y3=(Y2-YY)*W3+YY: LET Z3=0\n530 LET ZT=ZZ: LET YT=YY: LET XT=XX\n540 IF ZZ>0 THEN GO TO 590\n550 REM GOING INTO WATER\n560 LET ZZ=Z3: LET YY=Y3: LET XX=X3: GO SUB 950\n570 GO SUB 1070: LET ZZ=0: LET YY=YT: LET XX=XT: LET Z2=ZT: GO TO 620\n580 REM COMING OUT OF WATER\n590 LET ZZ=Z3: LET YY=Y3: LET XX=X3: GO SUB 950\n600 GO SUB 1090: LET ZZ=ZT: LET YY=YT: LET XX=XT\n610 LET Z2=ZZ\n620 LET X2=XX: LET Y2=YY: RETURN\n630 REM DISPLAY HERE\n640 GO SUB 1110: REM SET UP PLOTTING DEVICE ON SCREEN\n650 LET XS=.04: LET YS=.04: LET ZS=.04: REM SCALING FACTORS\n660 FOR I=0 TO MX: LET XO=-999: FOR J=0 TO I\n670 GO SUB 370: LET ZZ=D: LET YY=J/MX*10000: LET XX=I/MX*10000-YY/2\n680 GO SUB 940: NEXT J: NEXT I\n690 FOR J=0 TO MX: LET XO=-999: FOR I=J TO MX\n700 GO SUB 370: LET ZZ=D: LET YY=J/MX*10000: LET XX=I/MX*10000-YY/2\n710 GO SUB 940: NEXT I: NEXT J\n720 FOR G=0 TO MX: LET XO=-999: FOR H=0 TO MX-G\n730 LET I=G+H: LET J=H: GO SUB 370: LET ZZ=D: LET YY=J/MX*10000\n740 LET XX=I/MX*10000-YY/2: GO SUB 940: NEXT H: NEXT G\n750 GO TO 1130 :REM\n760 REM\n770 LET OX=XX\n780 LET XX=XX*RC-YY*RS\n790 LET YY=OX*RS+YY*RC\n800 RETURN\n850 REM\n860 LET OX=XX\n870 LET XX=VC*XX-VS*ZZ\n880 LET ZZ=VS*OX+VC*ZZ\n890 RETURN\n930 REM MOVE OR PLOT\n940 GO SUB 470\n950 LET XX=XX*XS: LET YY=YY*YS: LET ZZ=ZZ*ZS\n960 GO SUB 770\n970 GO SUB 860\n990 LET XP=INT(YY)+1: LET YP=INT(ZZ)\n1000 GO SUB 1030\n1010 RETURN\n1020 REM\n1030 LET XP=XP*0.55+5: LET YP=175-(24-0.7*YP)\n1040 IF XO=-999 OR F1=1 THEN LET X8=XP: LET Y8=YP: LET XO=XP\n1045 IF Y8>174 OR Y8<0 OR YP>174 OR YP<0 THEN RETURN\n1050 PLOT X8,Y8: DRAW (XP-X8),(YP-Y8): LET X8=XP: LET Y8=YP: RETURN\n1060 REM\n1070 LET F1=1: RETURN\n1080 REM\n1090 LET F1=0: RETURN\n1110 RETURN\n1150 STOP