1000 PRINTCHR$(147)" 64 PROJECTOR 1010 [153]" PERSPECTIVE PLOTTER 1020 PRINT" WITH HIDDEN LINES 1030 [153]" BY IAN ADAM 1040 PRINT" VANCOUVER BC 1050 [153]" DECEMBER 1985 1060 : 1070 REM REQUIRES HIRES PLOTTING ROUTINES 1080 REM THE TRANSACTOR VOL 5 ISSUE 6 1090 REM WITH EXTENSIONS BY IA 1100 : 1110 IF PEEK(38912)=1 THEN A=2 1120 POKE 53281,2-A 1130 ON A GOTO 1150,1190 1140 A=1: LOAD"HIPRNT1.ML",8,1 1150 POKE 56,152 : CLR 1160 LOAD"HIPRNT2.ML",8,1 1170 : 1180 REM START HERE! 1190 GOSUB1990, CONSTANTS 1200 GOSUB2650, CHOOSE 1210 GOSUB2090, CONFIG'N 1220 GOSUB2170, VIEWING ANGLE 1230 GOSUB2390, GET DATA 1240 GOSUB1390, SCALE 1250 GOSUB1580, PLOT 1260 GOSUB2550, MESSAGE 1270 : 1280 POKE198,0:WAIT198,1:GETB$ 1290 IF B$="R" THEN GOSUB2170:GOTO1240 1300 IF B$="P" THEN SYS HI,0: SYS DU,0,0: SYS TE:GOTO1260: DUMP TO PRINTER 1310 IF B$="A" THEN 1250 1320 IF B$="N" THEN IF DD THEN RUN 1330 IF B$="N" THEN GOSUB2650:GOTO1220 1340 IF B$="V" THEN V=1-V 1350 IF B$="H" THEN H=1-H 1360 IF B$<>"Q" THEN 1260 1370 END 1380 : 1390 REM VERTICAL SCALING 1400 PRINT:PRINT"SCALING DATA... 1410 VSCALAR[178]9E9 1420 [129] Y[178]0 [164] N 1430 A[178]Z(0,Y):[129] X[178]1 [164] M 1440 [139] Z(X,Y)[177]A [167] A[178]Z(X,Y) 1450 [130]:[143] FIND HIGHEST POINT ON LINE 1460 [139] A [167] TMP[178](199[171]YV(Y))[173]A : [139] VS[177]TM [167] VS[178]TM 1470 [130]:[143] SELECT BEST FEASIBLE SCALE 1480 : 1490 [143] CALCULATE RISE 1500 [153]"...STILL SCALING! 1510 FOR Y=0 TO N 1520 TM=YV(Y) 1530 FOR X=0 TO M 1540 R(X,Y)=Z(X,Y)*VS+TM 1550 NEXTX,Y 1560 RETURN 1570 : 1580 REM SET UP SCREEN 1590 SYSHI,0,0,13 1600 SYSDM,1 1610 : 1620 REM PLOT HORIZONTAL LINES 1630 SYSMO,10,R(0,0) 1640 D1=DR:IF H THEN D1=HD 1650 FOR Y=0 TO N 1660 TM=YH(Y) 1670 FOR X=1 TO M 1680 SYSD1,TM+XH(X),R(X,Y) 1690 NEXTX 1700 IF Y=N THEN 1800 1710 : 1720 REM PLOT VERTICAL LINES 1730 SYSDR,YH(Y+1)+XH(M),R(M,Y+1) 1740 SYSD1,YH(Y)+XH(M),R(M,Y) 1750 FOR X=M-1 TO 0 STEP-1 1760 IF V THEN X=0 1770 SYSMO,TM+XH(X),R(X,Y) 1780 SYSD1,YH(Y+1)+XH(X),R(X,Y+1) 1790 NEXT X,Y 1800 : 1810 REM DRAW BOX 1820 SYSMO,10,R(0,0) 1830 SYSDR,10,10 1840 SYSDR,XH(M),10 1850 SYSDR,XH(M),R(M,0) 1860 SYSMO,XH(M),10 1870 SYSDR,XH(M)+YH(N),YV(N) 1880 SYSDR,XH(M)+YH(N),R(M,N) 1890 : 1900 REM TITLE 1910 SYSCO,8:SYSPR,1,24,A$ 1920 : 1930 REM WAIT FOR HUMAN 1940 WAIT198,3:POKE198,0 1950 SYSTE:PRINT CHR$(147) 1960 RETURN 1970 : 1980 REM CONSTANTS 1990 HI=49152:DR=49155:MO=49161 2000 DM=49167:CO=49173:TE=49179 2010 PR=49182:HD=49191:DU=49194 2020 M=20:REM X-DIMENSION 2030 N=16:REM Y-DIMENSION 2040 SP=96:REM VERTICAL SEPARATION 2050 TH=-1 2060 MS$(0)="HIDE":MS$(1)="SHOW 2070 [142] 2080 : 2090 [133]"HIDDEN LINES TO BE SHOWN (Y/N)";B$ 2100 H[178][182](B$[178]"N") 2110 [133]"VERTICAL LINES TO BE SHOWN (Y/N)";B$ 2120 V[178][182](B$[178]"N") 2130 [134] Z(M,N),R(M,N) 2140 [134] XH(M),YH(N),YV(N) 2150 [142] 2160 : 2170 [143] VIEW ANGLE 2180 [139] THETA[179]0 [167] THETA[178]60:[143] DEFAULT ANGLE 2190 [153]:[153]"ENTER VIEWING ANGLE, OR PRESS RETURN 2200 PRINT"FOR"TH"DEGREES: 2210 [133]TH :[139] TH[179]0 [176] TH[177]90 [167] 2180 2220 AN[178]TH[172][255][173]180 2230 TMP[178]120[172][190](AN) 2240 XGRID[178][181]((309[171]TM)[173]M) 2250 YGRID[178][181](SP[172][191](AN)[173]N) 2260 YSTP[178][181](TM[173]N) 2270 : 2280 [143] CALCULATE OFFSETS 2290 [129] X[178]0 [164] M 2300 XHRIZ(X)[178]10[170]X[172]XG 2310 [130] 2320 [129] Y[178]0 [164] N 2330 YHRIZ(Y)[178]Y[172]YS 2340 YVERT(Y)[178]10[170]Y[172]YG 2350 [130] 2360 [142] 2370 : 2380 [143] DATA TO PLOT 2390 [153]:[153]"CREATING DATA... 2400 IF DD THEN 2480 2410 FOR X=0 TO M 2420 FOR Y=0 TO N 2430 IF E THEN R=FNR(X):S=FNS(Y) 2440 Z(X,Y)=FNZ(X) 2450 NEXTY:PRINTX;:NEXTX:RETURN 2460 : 2470 REM READ EMPIRICAL RESULTS FROM DATA 2480 FOR Y=0 TO N 2490 FOR X=0 TO M 2500 READ Z(X,Y) 2510 NEXTX:PRINTY;:NEXTY 2520 RETURN 2530 : 2540 REM *** MENUS: *** 2550 PRINT CHR$(19)CHR$(18);" PRESS:": PRINT 2560 PRINT"R REVIEW FROM ANOTHER ANGLE 2570 [153]"P SEND PROJECTION TO PRINTER 2580 PRINT"H: "MS$(1-H)" HIDDEN LINES 2590 [153]"V: "MS$(1[171]V)" VERTICAL LINES 2600 PRINT"A PLOT AGAIN 2610 [153]"N FOR A NEW SHAPE 2620 PRINT"Q QUIT 2630 [142] 2640 : 2650 [153]:[153] [199](18);" PRESS:": [153] 2660 [153]"1. STETSON 2670 PRINT"2. INVERSE WAVES 2680 [153]"3. FURROWS 2690 PRINT"4. CASCADE 2700 [153]"5. TWIN PEAKS 2710 PRINT"6. CRATER 2720 [153]"7. RADIAL 2730 PRINT"8. READ DATA 2740 : 2750 [146]198,1:[161]A$ 2760 E[178]0:A[178][197](A$):[139] A[179]1 [176] A[177]8 [167] [138] 2770 [145] A [141] 2890,2940,2980,3020,3070,3130,3180,2800 2780 [153]A$:[142] 2790 : 2800 [153]:[153] [199](18);" PRESS:": [153] 2810 [153]"1. RAINFALL 2820 PRINT"2. MORE DATA 2830 [153]:[153]"0. FIRST MENU 2840 WAIT198,1:GETA:IF A=0 OR A>2 THEN RUN 2850 ON A GOSUB 3230,3470 2860 READ A$,M,N,SP 2870 DD=1:RETURN 2880 : 2890 A=M/2:B=5:C=N/2:D=2:E=.2 2900 DEFFNR(X)=(X-A)/B:DEFFNS(Y)=(Y-C)/B 2910 DEFFNZ(X)=SIN(R*R*D+S*S)*EXP(-R*R-S*S)+E 2920 A$="STETSON":RETURN 2930 : 2940 A=5 2950 DEFFNZ(X)=SIN(X*Y/M)+A 2960 A$="INVERSE WAVES":RETURN 2970 : 2980 A=M/2:B=N/2:C=4:D=1 2990 DEFFNZ(X)=SIN((X-A)*(Y-B)/B)+Y/C+D 3000 A$="FURROWS":RETURN 3010 : 3020 A=6:B=2:C=.1:E=-1.2 3030 DEFFNR(X)=Y/N-X/M:DEFFNS(Y)=R+R 3040 DEFFNZ(X)=(C+EXP(S+R))*COS(A*R*R-A*S+E)+B 3050 A$="CASCADE":RETURN 3060 : 3070 A=INT(M/3):B=M-A:C=N/2:D=3:E=.1:F=.4 3080 DEFFNR(X)=(X-A)*(X-A)+(Y-C)*(Y-C) 3090 DEFFNS(Y)=(X-B)*(X-B)+(Y-C)*(Y-C) 3100 DEFFNZ(X)=COS(SQR(R))*(EXP(-R/D)+E)+COS(SQR(S))*(EXP(-S/D)+E)+F 3110 A$="TWIN PEAKS":RETURN 3120 : 3130 A=M/2:B=N/2:C=45:E=5 3140 DEFFNR(X)=ABS((X-A)*(X-A)+(Y-B)*(Y-B)-C)+E:DEFFNS(Y)=. 3150 DEFFNZ(X)=E/R+E 3160 A$="CRATER":RETURN 3170 : 3180 A=M/2:B=N/2:C=.001:D=40 3190 DEFFNZ(X)=(ABS(X-A)+ABS(Y-B))*SIN(4*ATN((Y-B)/(X-A+C)))+D 3200 A$="RADIAL":RETURN 3210 : 3220 : 3230 POKE 65,PEEK(61): POKE 66,PEEK(62): REM SET DATA PTR 3240 RETURN 3250 : 3260 DATA RAINFALL IN MM VANCOUVER 1975-1985,11,10,160 3270 : 3280 DATA 30, 94, 83, 90, 44, 31, 7, 29 3290 DATA 95, 266, 0, 0: REM 1985 3300 DATA 268, 176, 132, 140, 109, 80, 1, 17 3310 DATA 60, 167, 225, 170, 186, 239, 122, 98 3320 DATA 40, 84, 102, 30, 99, 97, 325, 77 3330 DATA 247, 229, 68, 116, 18, 28, 74, 44 3340 DATA 46, 131, 173, 131, 57, 106, 124, 173 3350 DATA 130, 138, 17, 59, 89, 125, 274, 157 3360 DATA 96, 165, 120, 71, 54, 100, 74, 35 3370 DATA 104, 40, 319, 218: REM 1980 3380 DATA 57, 162, 61, 57, 49, 33, 32, 19 3390 DATA 74, 76, 65, 294, 113, 95, 77, 84 3400 DATA 65, 23, 9, 104, 96, 42, 124, 88 3410 DATA 102, 87, 84, 52, 98, 18, 51, 53 3420 DATA 82, 98, 20, 140, 167, 159, 112, 87 3430 DATA 95, 67, 24, 84, 53, 81, 64, 135 3440 DATA 162, 126, 118, 30, 49, 31, 19, 106 3450 DATA 1, 300, 210, 268: REM 1975 3460 : 3470 POKE 65,PEEK(61): POKE 66,PEEK(62): REM SET DATA PTR 3480 RETURN 3490 : 3500 DATA NONE ENTERED,1,1,100