TEXT HOME DIM H(279),L(279) MM=1E10 UH=-MM UL=MM VH=-MM VL=MM FOR I=0 TO 279 L(I)=191 NEXT PRINT"LINE OF SIGHT:" INPUT"XE,YE,ZE=";XE,YE,ZE S1=XE*XE+YE*YE S2=SQR(S1) S3=SQR(S1+ZE*ZE) S4=1/(S2*S3) INPUT"M=";M INPUT"N=";N DIM X(M),Y(N),R(M,N,1) INPUT"XLOW =";XL INPUT"XHIGH =";XH INPUT"YLOW =";YL INPUT"YHIGH =";YH DX=(XH-XL)/M DY=(YH-YL)/N X0=XH IF XE<0 DX=-DX X0=XL END IF Y0=YH IF YE<0 DY=-DY Y0=YL END IF CX=140 CY=96 FOR I=0 TO M X(I)=X0-I*DX NEXT FOR J=0 TO N Y(J)=Y0-J*DY NEXT FOR I=0TO M FOR J=0 TO N X=X(I) Y=Y(J) Z=EXP(-X*X-Y*Y) GOSUB TRANSFORMATION R(I,J,0)=U R(I,J,1)=V GOSUB SCALE NEXT J VTAB 14 PRINT"I="I,"MAX="M NEXT I S=MM IF UL<>0 S0=139/ABS(UL) IF S00 S0=139/ABS(UH) IF S0<2 S=S0 END IF END IF IF VL<>0 S0=95/ABS(VL) IF S00 S0=95/ABS(VH) IF S0=ABS(YE) FOR I=0 TO M FOR J=1 TO N U1=R(I,J-1,0) V1=R(I,J-1,1) U2=R(I,J,0) V2=R(I,J,1) GOSUB WRIGHT GOSUB UPDATE NEXT J IF I<>M FOR J=0 TO N U1=R(I,J,0) V1=R(I,J,1) U2=R(I+1,J,0) V2=R(I+1,J,1) GOSUB WRIGHT GOSUB UPDATE NEXT J END IF NEXT I ELSE FOR J=0 TO N FOR I=1 TO M U1=R(I-1,J,0) V1=R(I-1,J,1) U2=R(I,J,0) V2=R(I,J,1) GOSUB WRIGHT GOSUB UPDATE NEXT I IF J<>N FOR I=0 TO M U1=R(I,J,0) V1=R(I,J,1) U2=R(I,J+1,0) V2=R(I,J+1,1) GOSUB WRIGHT GOSUB UPDATE NEXT I END IF NEXT J END IF PRINT CHR$(7) INPUT"PAPER OUTPUT (Y/N)?";Q$ IF LEFT$(Q$,1)<>"Y" END ELSE PR#1 POKE1913,2 PRINT CHR$(17) PR#0 TEXT END END IF * * TRANSFORMATION SUBROUTINE * #TRANSFORMATION U=(XE*Y-YE*X)/S2 V=(ZE*(X*XE+Y*YE)-S1*Z)*S4 RETURN * * WRIGHT'S ALGORITHM * #WRIGHT T1=0 T2=0 G1=0 G2=0 IF V1>=H(U1) T1=1 END IF IFV2>=H(U2) T2=1 END IF IF V1<=L(U1) G1=1 END IF IF V2<=L(U2) G2=1 END IF IF T1=1 AND T2=1 HPLOT U1,V1 TO U2,V2 RETURN ELSE IF G1=1 AND G2=1 HPLOT U1,V1 TO U2,V2 RETURN END IF IF T1+T2+G1+G2=0 RETURN END IF GOSUB LEFT IF KM<>KX F1=0 F2=0 FOR K=KM TO KX VK=VM+(VX-VM)*(K-KM)/(KX-KM) IF VK>H(K) OR VKH(K) OR VKH(U1) HPLOT U1,H(U1) TO U1,VX RETURN END IF IF VMH(U1) H(U1)=V1 END IF IF V2>H(U2) H(U2)=V2 END IF IF V1H(K) H(K)=VK END IF IF VKKX KM=U2 KX=U1 VM=V2 VX=V1 END IF RETURN * * FIND EXTREME VALUES IN U,V COORD' BEFORE SCALING * #SCALE IF U>UH UH=U END IF IF U
    VH VH=V END IF IF V