10 ' 20 ' EQUIPOTENTIAL CURVES FOR TWO POINT CHARGES 30 ' 40 ' ------------------- 1/5/88 ------------------------- 50 ' 60 ' --> LIST OF PROCEDURES <-- 70 ' 80 GOSUB 190 'INITIALIZATIONS 90 GOSUB 270 'INPUT 100 GOSUB 540 'CALCULATE POTENTIAL ON GRID 110 GOSUB 820 'PLOT 120 PRINT 130 PRINT 140 INPUT "WANT TO RUN ANOTHER (Y/N)? ", AGAIN$ 150 IF AGAIN$ = "Y" OR AGAIN$ = "y" THEN 90 160 END 170 ' 180 '------------------------------------------------------ 190 'INITIALIZATIONS AND INPUT 200 ' 210 DIM V(101,101), U$(101) 220 READ BLANK$,PLUS$,EQUAL$,ASTER$ 230 DATA " ","+","=","*" 240 ' 250 RETURN 260 '------------------------------------------------------ 270 'INPUT 280 ' 290 ' -- Two scale variables control size of the picture in 300 ' X and Y. XSCLE and YSCLE. They must be no larger 305 ' than 5 for max size. 310 ' 320 XSCLE = 5: YSCLE = 5 330 SCLE = (XSCLE + YSCLE)/10 340 ' 350 INPUT "# LINES = ";NYMAX 360 ' 370 NXMAX = INT(78 * (XSCLE/5)) + 1 380 IF NXMAX > 79 THEN NXMAX = 79 390 ALG2 = SCLE * LOG (2) / 2.5 400 PRINT 410 PRINT "INPUT VALUES FOR:" 420 PRINT 430 PRINT " X COORDINATE FOR Q1: A1" 440 PRINT " X COORDINATE FOR Q2: A2" 450 PRINT " CHARGE #1: Q1" 460 PRINT " CHARGE #2: Q2" 470 PRINT 480 PRINT "SEPARATE INPUT VALUES WITH COMMAS AND PRESS RETURN" 490 PRINT 500 INPUT A1,A2,Q1,Q2 510 PRINT 520 RETURN 530 '------------------------------------------------------ 540 'CALCULATE POTENTIAL ON GRID 550 ' 560 FOR NY = 1 TO NYMAX 570 ' 580 PRINT " > Working on line";NY;"of";NYMAX; 590 LOCATE ,1 600 ' 610 FOR NX = 1 TO NXMAX 620 ' 630 ' -- X and Y go from -10 to 10 640 ' 650 X = (NX - 51)/XSCLE 660 Y = (NY - 31)/YSCLE 670 ' 680 R1 = SQR ((X - A1) ^ 2 + Y ^ 2) 690 R2 = SQR ((X - A2) ^ 2 + Y ^ 2) 700 ' 710 IF R1 <> 0 AND R2 <> 0 THEN V(NY,NX) = Q1 / R1 + Q2 / R2 720 IF R1 = 0 OR R2 = 0 THEN V(NY,NX) = 99999! 730 ' 740 NEXT NX 750 ' 760 NEXT NY 770 ' 780 PRINT 790 ' 800 RETURN 810 '------------------------------------------------------ 820 'PLOT 830 ' 840 PRINT 850 INPUT "PRINTER (Y/N)? ",A$: 860 PRINT 870 IF A$ = "y" THEN A$ = "Y" 880 ' 890 IF A$ = "Y" THEN OPEN "LPT1:" FOR OUTPUT AS #1 900 IF A$ = "Y" THEN PRINT #1,CHR$(27)+CHR$(30)+CHR$(5) 910 ' 920 IF A$ <> "Y" THEN OPEN "SCRN:" FOR OUTPUT AS #1 930 ' 940 PRINT #1, " XSCLE = "; XSCLE; " YSCLE = "; YSCLE 950 PRINT #1, 960 PRINT #1, " A1 = ";A1; 970 PRINT #1, "; A2 = ";A2; 980 PRINT #1, "; Q1 = ";Q1; 990 PRINT #1, "; Q2 = ";Q2 1000 PRINT #1, 1010 FOR NX = 1 TO NXMAX 1020 U$(NX) = BLANK$ 1030 NEXT NX 1040 ' 1050 FOR NY = 1 TO NYMAX 1060 ' 1070 FOR NX = 1 TO NXMAX 1080 ' 1090 VP = V(NY,NX) 1100 IF VP <> 0 THEN JV = INT ( LOG ( ABS ( VP ) ) / ALG2) 1110 IF VP = 0 THEN JV = 0 1120 ' 1130 ' -- JV increases by two if V is doubled. 1140 ' 1150 ITEST = JV - 2 * INT (JV / 2) 1160 IF ITEST <> 0 THEN U$(NX) = BLANK$ 1170 IF ITEST = 0 AND VP < 0 THEN U$(NX) = EQUAL$ 1180 IF ITEST = 0 AND VP >= 0 THEN U$(NX) = PLUS$ 1190 IF VP = 99999! THEN U$(NX) = ASTER$ 1200 ' 1210 PRINT #1, U$(NX); 1220 ' 1230 NEXT NX 1240 ' 1250 PRINT #1, 1260 ' 1270 NEXT NY 1280 ' 1290 CLOSE #1 1300 ' 1310 RETURN 1320 '---------------- END OF PROGRAM LINES ----------------