home *** CD-ROM | disk | FTP | other *** search
- 1 KEY OFF:CLS:GOTO 9916
- 2 REM Lines 10 through 9915 are reserved for defining z=f(x,y).
- 3 REM
- 10 REM This function plots a circular wave in three dimensions.
- 20 REM Try plotting -1 <= x <= 1 and -1 <= y <= 1 with 30 divisions
- 30 REM along each axis, a rotation of 30 degrees, and a tilt of 20
- 40 REM degrees.
- 50 T1=X*X+Y*Y
- 60 T2=COS(7!*SQR(T1))
- 70 Z=2*T2*T2/(1!+30!*T1)
- 80 RETURN
- 9916 C2%=639:C3%=199:PRINT " Three Dimensional Plot"
- 9917 PRINT:PRINT:PRINT:PRINT "Smallest value for x";:INPUT E4
- 9918 PRINT "Largest value for x";:INPUT E3:PRINT "Smallest value for y";
- 9919 INPUT F3:PRINT "Largest value for y";:INPUT F2
- 9920 PRINT "Number of divisions for x";:INPUT C4%:IF C4%>1 THEN 9922
- 9921 PRINT "? there must be at least 2 divisions":GOTO 9920
- 9922 PRINT "Number of divisions for y";:INPUT C6%:IF C6%>1 THEN 9924
- 9923 PRINT "? there must be at least 2 divisions":GOTO 9922
- 9924 DIM E5(C4%*C6%),F6(C4%,C6%),G2(C4%,C6%),E0%(C4%*C6%),F0%(C4%*C6%),A5%(4)
- 9925 DIM A9%(4)
- 9926 PRINT "Rotation about the z-axis (degrees)";:INPUT D1
- 9927 PRINT "Tilt about the resulting y-axis (degrees)";:INPUT D9
- 9928 PRINT "After the plot is displayed, press a key to continue."
- 9929 PRINT "Evaluating function...":C9=ATN(1!)/45!:C8=D9*C9:B5=COS(C8)
- 9930 D3=SIN(C8):C8=D1*C9:B4=COS(C8):D2=SIN(C8):X=E4:Y=F3:GOSUB 10:E8=E4*B4+F3*D2
- 9931 F8=-E4*D2+F3*B4:G4=-E8*D3+Z*B5:F7=F8:G3=G4:E6=E8*B5+Z*D3:B6=C4%
- 9932 B6=(E3-E4)/B6:B7=C6%:B7=(F2-F3)/B7:X=E4:C5%=0:FOR E1%=1 TO C4%:Y=F3
- 9933 FOR F1%=1 TO C6%:GOSUB 10:C5%=C5%+1:E0%(C5%)=E1%:F0%(C5%)=F1%:E8=X*B4+Y*D2
- 9934 F6(E1%,F1%)=-X*D2+Y*B4:E5(C5%)=E8*B5+Z*D3:G2(E1%,F1%)=-E8*D3+Z*B5
- 9935 IF E5(C5%)>E6 THEN E6=E5(C5%)
- 9936 IF F6(E1%,F1%)<F8 THEN F8=F6(E1%,F1%)
- 9937 IF F6(E1%,F1%)>F7 THEN F7=F6(E1%,F1%)
- 9938 IF G2(E1%,F1%)<G4 THEN G4=G2(E1%,F1%)
- 9939 IF G2(E1%,F1%)>G3 THEN G3=G2(E1%,F1%)
- 9940 Y=Y+B7:NEXT F1%:X=X+B6:NEXT E1%:PRINT "Adjusting perspective..."
- 9941 IF F7-F8>G3-G4 THEN 9944
- 9942 IF G3=G4 THEN 9949
- 9943 E2=2!*(G3-G4)+E6:GOTO 9945
- 9944 E2=2!*(F7-F8)+E6
- 9945 E9=(F7+F8)/2!:F9=(G3+G4)/2!:C5%=0:FOR E1%=1 TO C4%:Y=F3:FOR F1%=1 TO C6%
- 9946 C5%=C5%+1:X=E5(C5%):Y=F6(E1%,F1%):Z=G2(E1%,F1%):B6=X-E2:B7=Y-E9:B8=Z-F9
- 9947 E5(C5%)=SQR(B6*B6+B7*B7+B8*B8):F6(E1%,F1%)=E9+(Y-E9)*(E2-E6)/(E2-X)
- 9948 G2(E1%,F1%)=F9+(Z-F9)*(E2-E6)/(E2-X):NEXT F1%:NEXT E1%
- 9949 PRINT "Sorting points...":D4%=C5%\2:D4%=D4%+1:D5%=C5%:D6=E5(1):D7%=E0%(1)
- 9950 D8%=F0%(1)
- 9951 IF D5%<=1 THEN 9964
- 9952 IF D4%<=1 THEN 9954
- 9953 D4%=D4%-1:D6=E5(D4%):D7%=E0%(D4%):D8%=F0%(D4%):GOTO 9956
- 9954 D6=E5(D5%):D7%=E0%(D5%):D8%=F0%(D5%):E5(D5%)=E5(1):E0%(D5%)=E0%(1)
- 9955 F0%(D5%)=F0%(1):D5%=D5%-1
- 9956 IF D5%<=1 THEN 9964
- 9957 C1%=D4%
- 9958 C0%=C1%:C1%=2*C1%:IF C1%>D5% THEN 9963
- 9959 IF C1%=D5% THEN 9961
- 9960 IF E5(C1%)>E5(C1%+1) THEN C1%=C1%+1
- 9961 IF D6<=E5(C1%) THEN 9963
- 9962 E5(C0%)=E5(C1%):E0%(C0%)=E0%(C1%):F0%(C0%)=F0%(C1%):GOTO 9958
- 9963 E5(C0%)=D6:E0%(C0%)=D7%:F0%(C0%)=D8%:GOTO 9951
- 9964 E5(1)=D6:E0%(1)=D7%:F0%(1)=D8%:SCREEN 2:A0=1!/(4!*(200!/640!)/3!):F5=C2%
- 9965 G1=C3%:IF A0*G1*(F7-F8)<=F5*(G3-G4) THEN 9967
- 9966 C7=F5/(A0*(F7-F8)):F4=0!:G0=-(G1-C7*(G3-G4))/2!:GOTO 9970
- 9967 IF A0*G1*(F7-F8)>=F5*(G3-G4) THEN 9969
- 9968 C7=G1/(G3-G4):F4=(F5-A0*C7*(F7-F8))/2!:G0=0!:GOTO 9970
- 9969 C7=1!:F4=F5/2!:G0=-G1/2!
- 9970 FOR E7%=1 TO C5%:E1%=E0%(E7%):IF E1%=C4% THEN 9992
- 9971 F1%=F0%(E7%):IF F1%=C6% THEN 9992
- 9972 A5%(1)=FIX(F4+C7*A0*(F6(E1%,F1%)-F8)):A9%(1)=FIX(G0+G1-C7*(G2(E1%,F1%)-G4))
- 9973 A5%(2)=FIX(F4+C7*A0*(F6(E1%+1,F1%)-F8))
- 9974 A9%(2)=FIX(G0+G1-C7*(G2(E1%+1,F1%)-G4))
- 9975 A5%(3)=FIX(F4+C7*A0*(F6(E1%+1,F1%+1)-F8))
- 9976 A9%(3)=FIX(G0+G1-C7*(G2(E1%+1,F1%+1)-G4))
- 9977 A5%(4)=FIX(F4+C7*A0*(F6(E1%,F1%+1)-F8))
- 9978 A9%(4)=FIX(G0+G1-C7*(G2(E1%,F1%+1)-G4)):B1%=A9%(1):B0%=B1%:FOR A3%=2 TO 4
- 9979 IF A9%(A3%)<B1% THEN B1%=A9%(A3%)
- 9980 IF A9%(A3%)>B0% THEN B0%=A9%(A3%)
- 9981 NEXT A3%:FOR B3%=B1% TO B0%:B9%=0:A4%=2:FOR A3%=1 TO 4
- 9982 IF A9%(A3%)>=B3% THEN 9987
- 9983 IF B3%>A9%(A4%) THEN 9988
- 9984 A2=A9%(A4%)-A9%(A3%):A1=A5%(A4%)-A5%(A3%):B2=B3%-A9%(A3%):A6=A5%(A3%)
- 9985 A7%=FIX(A1*B2/A2+A6):IF B9%=0 THEN A8%=A7% ELSE LINE (A7%,B3%)-(A8%,B3%),0
- 9986 B9%=1-B9%:GOTO 9988
- 9987 IF B3%>A9%(A4%) THEN 9984
- 9988 A4%=A4%+1:IF A4%>4 THEN A4%=1
- 9989 NEXT A3%:NEXT B3%:A8%=A7%:A4%=2:FOR A3%=1 TO 4
- 9990 LINE (A5%(A3%),A9%(A3%))-(A5%(A4%),A9%(A4%)):A4%=A4%+1:IF A4%>4 THEN A4%=1
- 9991 NEXT A3%
- 9992 NEXT E7%
- 9993 R$=INKEY$:IF LEN(R$)=0 THEN 9993
- 9994 SCREEN 0:WIDTH 80
- 9995 PRINT " Three Dimensional Plot":PRINT:PRINT
- 9996 PRINT:PRINT "Again (y or n)? ";
- 9997 R$=INKEY$:IF LEN(R$)=0 THEN 9997
- 9998 PRINT:IF ((R$="Y") OR (R$="y")) THEN 9926
- 9999 END