10  REM ****  HP TIME-SHARED BASIC PROGRAM LIBRARY  ********************
20  REM
30  REM             VFIELD:  POTENTIAL FIELD PICTURE
40  REM
50  REM             36322 (A833)  REV A -- 10/71
60  REM
70  REM ****  CONTRIBUTED PROGRAM  *************************************
80  REM VFIELD--COPYRIGHT 1970, POLYTECHNIC INSTITUTE OF BROOKLYN
90  REM  JOHN HOSIE - NORTHPORT HS - 7-8-69
100  REM  REVISED BY C.LOSIK  8-21-70 
110  REM  YOU HAVE MY BLESSING TO USE COMPUTED GO-TO'S AND  
120  REM  STRINGS IF YOU HAVE THEM (WE DIDN'T)
130  REM  V IS THE FIELD STRENGTH, R1,R2,Q1,Q2 ARE STANDARD NOT.
140  REM  THIS MAY BE CHANGED TO ALLOW HIGHER VALUED CHARGES
150  LET Q9=10
160  PRINT "THIS PROGRAM PLOTS A PICTURE OF THE RELATIVE ELECTRICAL"
170  PRINT "POTENTIAL FIELD STRENGTHS IN THE REGION SURROUNDING TWO"
180  PRINT "POINT CHARGES.  THE CHARGES ARE IN A COORDINATE PLANE"
190  PRINT "30 BY 30.  THE CHARGES MAY HAVE ANY VALUE WHOSE"
200  PRINT "MAGNITUDE IS LESS THAN"Q9", AND MAY BE ANYWHERE BETWEEN"
210  PRINT "0 AND 30 ON THE X AND Y AXES."
220  PRINT "THE MAGNITUDE OF THE FIELD DECREASES FROM 9 TO 1, 0, A TO J"
230  PRINT "THAT IS, 9 TO 1 IS A POSITIVE POTENTIAL, 0 IS ROUGHLY 0,"
240  PRINT "AND A=-1, B=-2, ... J=-9. (THERE IS NO 'I'.)"
250  PRINT 
260  PRINT "WHAT VALUES OF CHARGES DO YOU WISH TO STUDY?"
270  PRINT "TO STUDY ONLY ONE CHARGE, MAKE THE SECOND CHARGE 0."
280  PRINT "ENTER TWO VALUES OF CHARGE : ";
290  INPUT Q1,Q2
300  IF Q1=0 THEN 270
310  IF ABS(Q1) <= Q9 THEN 340
320  PRINT "VALUES MUST BE IN THE RANGE ("-Q9","Q9")."
330  GOTO 280
340  IF ABS(Q2)>Q9 THEN 320
350  REM  FOR EFFICIENCY, WE 'HIDE' THE ELECTROSTATIC CONSTANT HERE 
360  LET Q1=2*Q1
370  LET Q2=2*Q2
380  PRINT "WHERE SHALL THE FIRST CHARGE BE LOCATED";
390  INPUT X1,Y1
400  LET X1=INT(X1+.5)
410  LET Y1=INT(Y1+.5)
420  IF ABS(X1-15) <= 15 THEN 450
430  PRINT "VALUES MUST BE IN THE RANGE (0,30)."
440  GOTO 380
450  IF ABS(Y1-15)>15 THEN 430
460  IF Q2=0 THEN 550
470  PRINT "WHERE SHALL THE SECOND CHARGE BE LOCATED";
480  INPUT X2,Y2
490  LET X2=INT(X2+.5)
500  LET Y2=INT(Y2+.5)
510  IF ABS(X2-15) <= 15 THEN 540
520  PRINT "VALUES MUST BE IN THE RANGE (0,30)."
530  GOTO 470
540  IF ABS(Y2-15)>15 THEN 520
550  PRINT 
560  PRINT 
570  PRINT " ","*0         6        12        18        24        30*"
580  PRINT " ","*I---------I---------I---------I---------I---------I*"
590  FOR Y=30 TO 0 STEP -1
600  PRINT "        ";INT(Y+.5),"*";
610  LET Y6=(Y-Y1)*(Y-Y1)
620  LET Y7=(Y-Y2)*(Y-Y2)
630  REM  THIS IS FOR 50 ITERATIONS 
640  FOR X=0 TO 30 STEP .6
650  LET X6=X-X1
660  LET R1=SQR(X6*X6+Y6)
670  LET X7=X-X2
680  LET R2=SQR(X7*X7+Y7)
690  IF R1<.5 THEN 1480
700  IF R2<.5 THEN 1530
710  REM  THE ELECTROSTATIC CONSTANT IS 2 
720  LET V=Q1/R1+Q2/R2
730  FOR J=-9 TO 9
740  IF ABS(V-J)<.35 THEN 780
750  NEXT J
760  PRINT " ";
770  GOTO 1350
780  IF J>0 THEN 1090
790  IF J <> -9 THEN 820
800  PRINT "J";
810  GOTO 1350
820  IF J <> -8 THEN 850
830  PRINT "H";
840  GOTO 1350
850  IF J <> -7 THEN 880
860  PRINT "G";
870  GOTO 1350
880  IF J <> -6 THEN 910
890  PRINT "F";
900  GOTO 1350
910  IF J <> -5 THEN 940
920  PRINT "E";
930  GOTO 1350
940  IF J <> -4 THEN 970
950  PRINT "D";
960  GOTO 1350
970  IF J <> -3 THEN 1000
980  PRINT "C";
990  GOTO 1350
1000  IF J <> -2 THEN 1030
1010  PRINT "B";
1020  GOTO 1350
1030  IF J <> -1 THEN 1060
1040  PRINT "A";
1050  GOTO 1350
1060  IF J <> 0 THEN 1090
1070  PRINT "O";
1080  GOTO 1350
1090  IF J <> 1 THEN 1120
1100  PRINT "1";
1110  GOTO 1350
1120  IF J <> 2 THEN 1150
1130  PRINT "2";
1140  GOTO 1350
1150  IF J <> 3 THEN 1180
1160  PRINT "3";
1170  GOTO 1350
1180  IF J <> 4 THEN 1210
1190  PRINT "4";
1200  GOTO 1350
1210  IF J <> 5 THEN 1240
1220  PRINT "5";
1230  GOTO 1350
1240  IF J <> 6 THEN 1270
1250  PRINT "6";
1260  GOTO 1350
1270  IF J <> 7 THEN 1300
1280  PRINT "7";
1290  GOTO 1350
1300  IF J <> 8 THEN 1330
1310  PRINT "8";
1320  GOTO 1350
1330  IF J <> 9 THEN 760
1340  PRINT "9";
1350  NEXT X
1360  PRINT "*"
1370  NEXT Y
1380  PRINT " ","*I---------I---------I---------I---------I---------I*"
1390  PRINT 
1400  PRINT 
1410  PRINT "DO YOU WISH TO VIEW ANOTHER PLOT (1=YES, 0=NO) : ";
1420  INPUT Q1
1430  PRINT 
1440  PRINT 
1450  IF Q1=1 THEN 250
1460  IF Q1=0 THEN 1560
1470  GOTO 1400
1480  IF Q1>0 THEN 1510
1490  PRINT "-";
1500  GOTO 1350
1510  PRINT "+";
1520  GOTO 1350
1530  IF Q2=0 THEN 720
1540  IF Q2>0 THEN 1510
1550  GOTO 1490
1560  END 
