10 ' GRAPH-MASTER
20 ' By James Long 30 ' Amstrad Action August 1988 40 ' 50 ' ** SET UP ** 60 MODE 1:BORDER 2 70 INK 0,26:INK 1,0:INK 2,2:INK 3,6 80 WINDOW#1,1,40,23,25:p$=CHR$(184) 90 xmin=-5:xmax=5:ymin=-5:ymax=5:col=1 100 xinc=1:yinc=1:pmin=0:pmax=2:st%=4 110 GOSUB 300:GOSUB 450:GOSUB 1440 120 : 130 ' ** MAIN LOOP ** 140 k$=UPPER$(INKEY$):k=VAL(k$) 150 IF k$="" THEN 140 160 IF k$="C" THEN GOSUB 650 170 IF k$="P" THEN GOSUB 760 180 IF k$="Y" THEN GOSUB 880:GOSUB 300 190 IF k$="R" THEN GOSUB 970:GOSUB 300 200 IF k$="A" THEN GOSUB 1060:GOSUB 300 210 IF k$="I" THEN GOSUB 1170:GOSUB 300 220 IF k$="G" THEN GOSUB 1260:GOSUB 300 230 IF k$="S" THEN GOSUB 1350: GOSUB 300 240 IF k$="0" OR k>0 AND k<4 THEN col=k:GOSUB 300 250 IF k$="W" THEN GOSUB 450 260 IF k$="Q" THEN MODE 1:END 270 GOTO 140 280 ' 290 ' ** MAIN DISPLAY ** 300 PAPER#1,1:CLS#1 310 LOCATE#1,1,1:PEN#1,0 320 PRINT#1,"Cpl,Ppl,Yeq,Req,Ax,Inc,"; 330 PRINT#1,"rnG,St,0123,Wp,Qt" 340 LOCATE#1,1,2:PRINT#1,"xI";xinc; 350 PRINT#1,"yI";yinc;"col"; 360 PAPER#1,0:PEN#1,col:PRINT#1,col; 370 PAPER#1,1:PEN#1,0 380 PRINT#1," ";pmin;CHR$(243);pmax; 390 PRINT#1,p$"rad St";st% 400 LOCATE#1,1,3:PRINT#1,"y=";y$; 410 PRINT#1," r=";r$ 420 RETURN 430 ' 440 ' ** DRAW AXES ** 450 ORIGIN 0,48,0,640,400,48:CLG 460 xstep=640/(xmax-xmin) 470 ystep=352/(ymax-ymin) 480 xorig=-xmin*xstep:yorig=-ymin*ystep 490 xe=xorig:ye=yorig 500 IF xorig<320 THEN xe=640-xorig 510 IF yorig<176 THEN ye=352-yorig 520 PLOT 0,yorig,1:DRAWR 640,0 530 PLOT xorig,0:DRAWR 0,352 540 FOR x=0 TO xe STEP xstep*xinc 550 PLOT xorig+x,yorig-4:DRAWR 0,8 560 PLOT xorig-x,yorig-4:DRAWR 0,8 570 NEXT x 580 FOR y=0 TO ye STEP ystep*yinc 590 PLOT xorig-4,yorig+y:DRAWR 8,0 600 PLOT xorig-4,yorig-y:DRAWR 8,0 610 NEXT y 620 RETURN 630 ' 640 ' ** PLOT CARTESIAN GRAPH ** 650 ON ERROR GOTO 730 660 xc=0:s=st%/2 670 FOR x=xmin TO xmax STEP s/xstep 680 IF INKEY$=" " THEN RETURN 690 xc=xc+s:y=FNy(x)*ystep 700 PLOT xc,yorig+y,col 710 NEXT x 720 RETURN 730 RESUME NEXT 740 ' 750 ' ** PLOT POLAR GRAPH ** 760 ON ERROR GOTO 850 770 s=0.01*st% 780 FOR a=pmin*PI TO pmax*PI STEP s 790 IF INKEY$=" " THEN RETURN 800 x=COS(a)*FNr(a)*(xstep/PI) 810 y=SIN(a)*FNr(a)*(ystep/PI) 820 PLOT xorig,yorig,1:PLOTR x,y,col 830 NEXT a 840 RETURN 850 RESUME NEXT 860 ' 870 ' ** CHOOSE CARTESIAN EQUATION ** 880 CLS#1:PRINT#1,"Choose (1)";a$ 890 PRINT#1,"cartesian (2) ";b$ 900 PRINT#1,"equation (3) ";c$ 910 k$=INKEY$:eq=VAL(k$) 920 IF eq<1 OR eq>3 THEN 910 930 ON eq GOSUB 1550,1570,1590 940 RETURN 950 ' 960 ' ** CHOOSE POLAR EQUATION ** 970 CLS#1:PRINT#1,"Choose (1) ";d$ 980 PRINT#1,"polar (2) ";e$ 990 PRINT#1,"equation (3) ";f$ 1000 k$=INKEY$:eq=VAL(k$) 1010 IF eq<1 OR eq>3 THEN 1000 1020 ON eq GOSUB 1620,1640,1660 1030 RETURN 1040 ' 1050 ' ** ALTER RANGES OF AXES ** 1060 CLS#1:PRINT#1,"Enter new ranges:" 1070 LOCATE #1,1,2 1080 INPUT#1,"xmin,xmax";xmin,xmax 1090 IF xmin>0 OR xmax<0 THEN 1070 1100 LOCATE #1,1,3 1110 INPUT#1,"ymin,ymax";ymin,ymax 1120 IF ymin>0 OR ymax<0 THEN 1100 1130 GOSUB 450 1140 RETURN 1150 ' 1160 ' ** CHANGE INCREMENTS OF AXES ** 1170 CLS#1 1180 PRINT#1,"Enter new increments:" 1190 LOCATE#1,1,2 1200 INPUT#1,"xI,yI";xinc,yinc 1210 IF xinc<=0 OR yinc<=0 THEN 1190 1220 GOSUB 450 1230 RETURN 1240 ' 1250 ' ** ALTER POLAR GRAPH RANGE ** 1260 CLS#1:PRINT#1,"Enter new range"; 1270 PRINT#1,"for polar graph:" 1280 LOCATE#1,1,2 1290 PRINT#1,"pmin/"p$",pmax/"p$; 1300 INPUT#1,pmin,pmax 1310 IF pmin>=pmax THEN 1280 1320 RETURN 1330 ' 1340 ' ** CHANGE PLOTTING-STEP ** 1350 CLS#1:PRINT#1,"Enter new "; 1360 PRINT#1,"plotting-step" 1370 LOCATE#1,1,2 1380 INPUT#1,"(1 to 9) ";st% 1390 IF st%<1 OR st%>9 THEN 1370 1400 RETURN 1410 ' 1420 ' ** EQUATIONS ** 1430 ' Cartesian 1440 a$="(x/2)^3" 1450 b$="(x-2)/((x+1)*(x-2))" 1460 c$="x^2-4" 1470 ' Polar 1480 d$="a" 1490 e$="4*(2-sin(3*a))" 1500 f$="3*(3+COS(5*a))" 1510 RETURN 1520 ' 1530 ' ** FUNCTIONS ** 1540 ' Cartesian 1550 DEF FNy(x)=(x/2)^3 1560 y$=a$:RETURN 1570 DEF FNy(x)=(x-2)/((x+1)*(x-3)) 1580 y$=b$:RETURN 1590 DEF FNy(x)=x^2-4 1600 y$=c$:RETURN 1610 ' Polar 1620 DEF FNr(a)=a 1630 r$=d$:RETURN 1640 DEF FNr(a)=4*(2-SIN(3*a) ) 1650 r$=e$:RETURN 1660 DEF FNr(a)=3*(3+COS(5*a)) 1670 r$=f$:RETURN 1680 ' 1690 ' ** THE END ** |