Listing of file='PLTDEM.BAS;01' on disk='vmedia/chip_120-sector.ccvf'
1 REM ** PLOTTING DEMO - COPYRIGHT (C) 1979 BY TREVOR TAYLOR ** 2 REM 3 REM THIS PROGRAM DEMONSTRATES THE USE OF A SET OF SUBROUTINES 4 REM THAT ARE DESIGNED FOR PLOTTING GRAPHS ON THE CCII. 5 REM 6 REM FIVE DIFFERENT EXAMPLES ARE INCLUDED. NUMBER 4 CAN BE 7 REM USED TO PLOT A SET OF X-Y DATA ENTERED BY THE USER. 8 REM NUMBER 5 COULD BE USED TO PLOT ANY FUNCTION OF THE 9 REM USER'S CHOICE BY CHANGING THE FUNCTION IN LINE 5000. 10 C= 3.14159/ 180 20 DIM X(20),Y(20) 30 FG = 1 100 PLOT 12,14,29,18 110 PRINT "X - Y PLOTTING PROGRAM EXAMPLES" 120 PRINT "THIS PROGRAM DEMONSTRATES A FEW WAYS OF USING THE" 130 PRINT "PLOTTING SUBROUTINES WITH VARIOUS FUNCTIONS BASED" 140 PRINT "ON SINE WAVES.":PRINT 150 PRINT "ANY DESIRED FUNCTION CAN BE PLOTTED BY REPLACING" 160 PRINT "THE FUNCTION DEFINITION IN LINE 5000 AND RUNNING" 165 PRINT "THE PROGRAM WITH NUMBER 5." 170 PRINT :INPUT "PICK A NUMBER BETWEEN 1 AND 5 - ";N 180 IF N> 5GOTO 170 190 IF N< 1THEN END 200 ON NGOTO 1000,2000,3000,4000,5000 300 REM 1000 DEF FN Y(X)= SIN (X* 3.14159/ 180) 1005 X1= - 180:X2= 90:Y1= - 1:Y2= 1:XS= 10 1010 GOSUB 50000:REM INITIALIZE THE PLOT AND CLEAR THE SCREEN 1020 GOSUB 51000:REM DRAW THE AXES 1030 FOR X= X1TO X2STEP XS 1040 Y= FN Y(X) 1050 GOSUB 52000:REM PLOT A POINT 1060 NEXT X 1070 GOSUB 50100:REM RESET THE PLOT, BUT DON'T ERASE THE SCREEN 1080 FOR X= X1TO X2STEP 6 1090 Y= - FN Y(X) 1100 GOSUB 52000 1110 NEXT X 1200 PLOT 8:INPUT "TYPE <RETURN>";A$ 1210 PLOT 12,14 1220 PRINT "THIS EXAMPLE SHOWS THAT MULTIPLE CURVES CAN BE" 1230 PRINT "PLOTTED ON THE SAME SET OF AXES. IN FACT, YOU" 1240 PRINT "CAN EVEN CHANGE THE SCALES BETWEEN DRAWING THE" 1250 PRINT "CURVES, ALTHOUGH THE LABELS WOULD BE WRONG THEN." 1260 PRINT :PRINT "THE BLURRING WHERE THE GRAPH CROSSES THE" 1270 PRINT "AXIS LINES IS A FUNCTION OF THE HARDWARE AND" 1280 PRINT "CANNOT BE FIXED." 1300 GOTO 6000 1500 REM 2000 DEF FN Y(X)= EXP (- X/ 720)* SIN (C* X) 2010 X1= 0:X2= 720:Y1= - 1:Y2= 1 2015 XS= 10 2020 GOSUB 50000:REM INITIALIZE THE PLOT AND CLEAR SCREEN 2030 FOR X= X1TO X2STEP XS 2040 Y= FN Y(X) 2050 GOSUB 52000:REM PLOT THE POINTS 2060 NEXT X 2070 GOSUB 51000:REM NOW DRAW THE AXES OVER THE FINISHED CURVE 2080 PLOT 8:INPUT "TYPE <RETURN>";A$ 2090 PLOT 12,14 2100 PRINT "IN THIS EXAMPLE THE CURVE IS PLOTTED BEFORE THE" 2110 PRINT "AXES. NOTE THAT SOME OF THE POINTS CHANGE COLOR" 2120 PRINT "WHEN THE AXES ARE DRAWN. THIS IS UNAVOIDABLE." 2200 GOTO 6000 2500 REM 3000 DEF FN Y(X)= SIN (C* X) 3010 X1= 0:X2= 180:Y1= - 1:Y2= 1 3015 XS= 10:FG = 0 3020 GOSUB 50000:REM INITIALIZE 3030 GOSUB 51000:REM DRAW AXES 3040 FOR X= X1TO X2STEP XS 3050 ST= 1:REM SET ST=1 (OR GOSUB 50100) FOR POINT-PLOT MODE 3060 Y= FN Y(X) 3070 GOSUB 52000:REM PLOT THE POINT 3080 Y= - Y 3090 ST= 1 3100 GOSUB 52000:REM PLOT ANOTHER POINT ON A DIFFERENT CURVE 3110 NEXT X 3120 PLOT 8:INPUT "TYPE <RETURN>";A$ 3150 PLOT 12,14 3160 PRINT "THE CURVES HERE WERE PLOTTED IN POINT-PLOT MODE" 3170 PRINT "(AS OPPOSED TO VECTOR OR LINE MODE). THIS ALLOWS" 3180 PRINT "TWO CURVES TO BE 'INTERLACED'." 3190 PRINT : PRINT "NOTE ALSO THE USE OF THE AXES WITHOUT" 3200 PRINT "DRAWING THE GRID LINES. IN MANY CASES THIS IS" 3210 PRINT "PREFERABLE BECAUSE THE GRID TENDS TO CLUTTER" 3220 PRINT "UP THE SCREEN. IT ALSO AVOIDS THE SPLOTCHES WHERE" 3230 PRINT "THE CURVE CROSSES THE GRID LINES (EXAMPLES 1 AND 2)." 3240 PRINT "THIS CAN BE PARTICULARLY BAD IN POINT-PLOT MODE." 3250 FG = 1 3300 GOTO 6000 3500 REM 4000 PLOT 12,14 4005 FG = 1 4010 PRINT "IN THIS CASE YOU CAN ENTER DATA POINTS WHICH WILL" 4020 PRINT "THEN BE PLOTTED BY THE COMPUTER ON THE LARGEST" 4030 PRINT "SCALE POSSIBLE." 4040 PRINT "YOU HAVE TO ENTER THE DATA AS X-Y PAIRS." 4050 PRINT :INPUT "NUMBER OF DATA POINTS (20 MAXIMUM) = ";M 4060 IF M> 20GOTO 4050 4070 PRINT :PRINT "ENTER EACH POINT AS IT IS REQUESTED:" 4080 FOR I= 1TO M 4090 PRINT "DATA POINT";I; 4100 INPUT " = ";X(I),Y(I) 4110 NEXT I 4115 INPUT "DRAW THE GRID LINES (Y/N) ? ";A$ 4120 IF (A$< > "Y") THEN FG = 0:REM SET THE FLAG FOR THE GRID 4125 X1= X(1):X2= X(1):Y1= Y(1):Y2= Y(1) 4130 FOR I= 1TO M 4140 IF X(I)> X2THEN X2= X(I) 4150 IF X(I)< X1THEN X1= X(I) 4160 IF Y(I)> Y2THEN Y2= Y(I) 4170 IF Y(I)< Y1THEN Y1= Y(I) 4180 NEXT I 4185 INPUT "JOIN THE POINTS BY A LINE (Y/N) ? ";A$ 4190 GOSUB 50000 4200 GOSUB 51000 4210 FOR I= 1TO M 4220 IF A$< > "Y"THEN ST= 1:REM SET POINT-PLOT MODE IF REQUESTED 4230 X= X(I) 4240 Y= Y(I) 4250 GOSUB 52000 4260 NEXT I 4300 PLOT 8:INPUT "TYPE <RETURN>";A$ 4310 PLOT 12,14 4320 PRINT "THIS COULD BE A VERY HANDY ROUTINE FOR DRAWING UP" 4330 PRINT "GRAPHS TO SEE WHAT THEY LOOK LIKE WITHOUT MUCH" 4340 PRINT "EFFORT." 4350 FG = 1 4400 GOTO 6000 5000 DEF FN Y(X)= SIN (C* X):REM C CONVERTS TO DEGREES 5010 PLOT 12,14 5020 PRINT "THE FUNCTION TO BE PLOTTED IN THIS CASE IS A" 5030 PRINT "SIMPLE SINE CURVE. YOU HAVE TO ENTER THE" 5040 PRINT "STARTING VALUE AND FINISHING VALUE ON THE" 5050 PRINT "X-AXIS IN DEGREES (SAY 0 TO 360)." 5060 PRINT "YOU ALSO HAVE TO ENTER THE RANGE ON THE" 5070 PRINT "Y-AXIS, WHICH WE KNOW TO BE -1 TO +1, BUT YOU" 5080 PRINT "SHOULD TRY DIFFERENT VALUES TO SEE WHAT HAPPENS." 5100 PRINT "THE LAST THING TO ENTER IS THE INCREMENT" 5110 PRINT "BETWEEN X-VALUES USED IN THE CALCULATIONS," 5120 PRINT "WHICH WILL AFFECT THE SPEED AND ACCURACY." 5130 PRINT :INPUT "STARTING X-VALUE = ";X1 5140 INPUT "ENDING X-VALUE = ";X2 5150 INPUT "LOWEST Y-VALUE = ";Y1 5160 INPUT "HIGHEST Y-VALUE = ";Y2 5170 INPUT "X-INCREMENT FOR CALCULATIONS AND PLOTTING = ";XS 5200 GOSUB 50000 5210 GOSUB 51000 5230 FOR X= X1TO X2STEP XS 5240 Y= FN Y(X) 5250 GOSUB 52000 5260 NEXT X 5270 PLOT 8:INPUT "TYPE <RETURN>";A$ 5300 PLOT 12,14 5310 PRINT "YOU SHOULD PLAY AROUND WITH THIS EXAMPLE TO GET" 5320 PRINT "A FEELING FOR HOW THINGS WORK. CHANGE THE FUNCTION" 5330 PRINT "IN LINE 5000 IF YOU LIKE." 5340 PRINT "IN PARTICULAR, TRY REDUCING THE Y-RANGE IN SIZE." 5350 PRINT "THIS WILL 'CLIP' THE CURVE OFF AT THE EDGES." 5400 GOTO 6000 6000 PRINT :INPUT "RUN AGAIN (Y/N) ? ";A$ 6010 IF A$= "Y"GOTO 100 6020 LOAD "MENU":RUN 50000 REM ********************************************** 50001 REM 50002 REM ** INITIALIZATION ROUTINE - SCALES THE AXES ** 50003 REM THE SCREEN GETS ERASED 50004 REM 50005 REM THE USER MUST SET UP THE X- AND Y-RANGES (X1 TO X2, 50006 REM Y1 TO Y2) BEFORE CALLING THIS ROUTINE. DATA IS PLOTTED 50007 REM ON A 100 BY 100 AREA OF THE SCREEN. X3 AND Y3 ARE THE 50008 REM SCALING FACTORS TO MAKE THE DATA FIT THE SCREEN. 50009 REM 50010 X0 = 10: Y0 = 10: I1 = 100: I2 = 100 50015 REM ** GX, GY ARE THE LENGTHS OF THE GRID LINES ** 50020 GX = 100: GY = 100: 50021 REM 50022 REM ** THE FLAG, FG, IS USED TO GET THE GRID LINES 50023 REM DRAWN ON THE AXES. IF FG=0, NO GRID LINES ARE 50024 REM DRAWN, ONLY TIC MARKS. GRID LINES TEND TO OBSCURE 50025 REM THE PLOTTED CURVE. FG<>0 SELECTS GRID LINES. 50026 REM NOTE THAT THE FLAG MUST BE SET BEFORE THE CALL 50027 REM TO THE INITIALIZATION ROUTINE, NOT THE AXIS 50028 REM ROUTINE ** 50029 REM 50030 IF (FG< > 0) GOTO 50040 50035 GX = 2: GY = 2 50040 X3= I1/ (X2- X1) 50050 Y3= I2/ (Y2- Y1) 50060 PLOT 12,15 50094 REM 50095 REM ** TO PLOT MULTIPLE CURVES ON THE SAME AXES, CALL HERE 50096 REM OR SET ST=1 IN THE MAIN ROUTINE. THIS ALLOWS A MOVE 50097 REM TO THE NEXT POINT, INSTEAD OF A DRAW. ** 50100 ST= 1 50110 RETURN 50115 REM 51000 REM *********************************************** 51001 REM 51002 REM ** AXIS ROUTINE - DRAWS AXES AND LABELS THEM ** 51003 REM NOTE THAT THIS ROUTINE DOES NOT ERASE THE SCREEN 51004 REM 51005 PLOT 29,17,2,250 51010 PLOT X0,Y0,X0+ I1 51020 PLOT 255,29,22,2,250,X0 51030 FOR I= 1 TO 10: PLOT Y0+ I* 10: PLOT X0+ GX: NEXT I 51040 PLOT 255,29,17,2 51050 PLOT 246 51060 PLOT Y0,X0,Y0+ I2 51070 PLOT 255,29,22,2,246,Y0 51080 FOR I= 1 TO 10:PLOT X0+ I* 10: PLOT Y0+ GY: NEXT I 51090 PLOT 255,29,19 51100 PLOT 3,3,30:PRINT X1 51110 PLOT 3,25,30:PRINT "X - AXIS" 51120 PLOT 3,53,30:PRINT X2 51130 PLOT 3,20,31:PRINT "X INCREMENT = ";(X2- X1)/ 10; 51140 PLOT 3,0,29:PRINT Y1 51150 D$ = STR$ ((Y2- Y1)/ 10) 51160 PLOT 3,0,10,27,10:PRINT "Y - AXIS"; 51170 PLOT 3,2,7:PRINT "Y INCREMENT =";D$;:PLOT 27,11 51180 PLOT 3,0,4:PRINT Y2 51190 PLOT 3,25,0:PRINT "X - Y PLOT"; 51200 PLOT 8,29,18 51210 RETURN 51215 REM 52000 REM ********************************************** 52001 REM 52002 REM ** PLOTTING ROUTINE - PLOTS THE POINT (X,Y) ** 52003 REM POINTS JOINED BY A LINE IF ST=0, OTHERWISE NOT 52004 REM 52005 PLOT 2,242 52010 IF ST< > 0THEN PLOT 253 52020 X4= (X- X1)* X3+ X0 52030 IF X4> X0+ I1GOTO 52200 52040 IF X4< X0GOTO 52200 52050 Y4= (Y- Y1)* Y3+ Y0 52060 IF Y4> Y0+ I2GOTO 52200 52070 IF Y4< Y0GOTO 52200 52080 PLOT X4,Y4 52090 ST= 0 52100 PLOT 255 52110 RETURN 52200 ST= 1 52210 GOTO 52100