100 REM THE PROJECTOR - PERSPECTIVE PLOTTER 110 REM BY IAN ADAM VANCOUVER, BC 120 REM REQUIRES HIRES PLOTTING ROUTINES 130 REM FROM THE TRANSACTOR VOL 5 ISS 06 140 : 150 REM SETUP 160 HI=49152: CO=49173: DR=49155 170 MO=49161: PR=49182: DM=49167: TE=49179 180 CD$=CHR$(17) 190 : 200 IF PEEK(HI+1)=194 THEN 240 210 LOAD"HIRES",8,1 220 : 230 REM PARAMETERS 240 M=20: REM X-DIMENSION 250 N=16: REM Y-DIMENSION 260 DIM Z(M,N),R(M,N) 270 DIM XH(M),YH(N),YV(N) 280 : 290 REM DATA TO PLOT 300 PRINT "CREATING DATA" 310 FOR X=0 TO M 320 FOR Y=0 TO N 330 Z(X,Y)=12*X+10*Y-1.25*X*Y 340 NEXT Y: PRINT X: NEXT X 350 : 360 A$="HYPERBOLIC PARABOLOID": REM TITLE 370 : 380 REM INSERT OTHER EXPRESSIONS IN 330, AND CHANGE TITLE IN 360 390 REM Z(X,Y)=X*X-X*X*X/22+75*Y-12*Y*Y+Y*Y*Y/2 400 REM A$="CONTOURS" 410 REM Z(X,Y)=560-EXP(SQR(ABS((X-10)*(Y-8)/2))) 420 REM A$="SHELL ROOF" 430 REM TM=SQR(X*X+1.5*Y*Y): Z(X,Y)=10+SIN(TM)+Y/4 440 REM A$="GRAVITY WAVES" 450 REM TM=SQR((X-10)^2+(Y-8)^2): Z(X,Y)=150-TM*55+TM*TM*8-TM*TM*TM/3 460 REM A$="SPLASH" 470 REM A=20-ABS(X-10): B=18-ABS(Y-8): Z(X,Y)=A: IFB>ATHENZ(X,Y)=B 480 REM A$="HOUSE" 490 REM Z(X,Y)=Y+(8-Y)*((X>4)AND(X<16))*((Y>3)AND(Y<13)) 500 REM A$="PLATEAU" 510 REM OR READ EMPIRICAL RESULTS FROM DATA 520 : 530 REM PROJECTION 540 THETA=60: REM DEFAULT ANGLE 550 PRINT CD$"ENTER VIEWING ANGLE, OR PRESS RETURN 560 [153] "FOR 60 DEGREES: 570 INPUT TH 580 TH=TH*3.14159265/180 590 TMP=120*COS(TH) 600 XGRID=INT((309-TM)/M) 610 YGRID=INT(96*SIN(TH)/N) 620 YSTP=INT(TM/N) 630 : 640 REM CALCULATE OFFSETS 650 FOR X=0 TO M 660 XHRIZ(X)=10+X*XG 670 NEXT 680 FOR Y=0 TO N 690 YHRIZ(Y)=Y*YS 700 YVERT(Y)=10+Y*YG 710 NEXT 720 : 730 REM VERTICAL SCALING 740 PRINT "SCALING DATA 750 VSCALAR[178]9E9 760 [129] Y[178]0 [164] N 770 A[178]0: [129] X[178]0 [164] M 780 [139] Z(X,Y)[177]A [167] A[178]Z(X,Y) 790 [130]: [143] FIND HIGHEST POINT ON LINE 800 [139] A [167] TMP[178](199[171]YV(Y))[173]A 810 [139] VS[177]TM [167] VS[178]TM 820 [130]: [143] SELECT BEST FEASIBLE SCALE 830 : 840 [143] CALCULATE RISE 850 [153] "...STILL SCALING! 860 FOR Y=0 TO N 870 TM=YV(Y) 880 FOR X=0 TO M 890 R(X,Y)=Z(X,Y)*VS+TM 900 NEXT X,Y 910 : 920 REM SET UP SCREEN 930 SYS HI,0,0,8 940 SYS DM,1 950 : 960 REM PLOT HORIZONTAL LINES 970 FOR Y=0 TO N 980 TM=YH(Y) 990 SYS MO,TM+10,R(0,Y) 1000 FOR X=1 TO M 1010 SYS DR,TM+XH(X),R(X,Y) 1020 NEXT X,Y 1030 : 1040 REM PLOT VERTICAL LINES 1050 FOR X=0 TO M 1060 TM=XH(X) 1070 SYS MO,TM,R(X,0) 1080 FOR Y=1 TO N 1090 SYS DR,TM+YH(Y),R(X,Y) 1100 NEXT Y,X 1110 : 1120 REM DRAW BOX 1130 SYS MO,10,R(0,0) 1140 SYS DR,10,10 1150 SYS DR,XH(M),10 1160 SYS DR,XH(M),R(M,0) 1170 SYS MO,XH(M),10 1180 SYS DR,XH(M)+YH(N),YV(N) 1190 SYS DR,XH(M)+YH(N),R(M,N) 1200 : 1210 REM TITLE 1220 SYS CO,13: SYS PR,1,24,A$ 1230 : 1240 REM WAIT FOR HUMAN 1250 WAIT 198,1: GET B$ 1260 SYS TE 1270 : 1280 PRINT CD$"PRESS R TO REVIEW FROM ANOTHER ANGLE 1290 [153] "PRESS ANY OTHER KEY TO END 1300 WAIT 198,1: GET B$ 1310 IF B$="R" THEN 540 1320 END