from math import sqrt
import matplotlib.pyplot as plt

K = 9.0e9

def field(x, y, q, xq, yq):

    Ex = 0.
    Ey = 0.
    
    for i in range(len(q)):
        dx = x - xq[i]
        dy = y - yq[i]
        dr2 = dx*dx + dy*dy
        dr3i = K*q[i]/(dr2*sqrt(dr2));
        Ex += dx*dr3i
        Ey += dy*dr3i

    return Ex,Ey

def potential(x, y, q, xq, yq):

    phi = 0.
    for i in range(len(q)):
        dx = x - xq[i]
        dy = y - yq[i]
        dr = sqrt(dx*dx + dy*dy)
        phi += K*q[i]/dr

    return phi

def setup_charges():
    q = []
    xq = []
    yq = []

    q.append(1.e-6)
    q.append(-1.e-6)

    xq.append(-1.)
    xq.append(1.)

    yq.append(0.)
    yq.append(0.)

    return q, xq, yq

if __name__ == "__main__" :

    q, xq, yq = setup_charges()

    y = -10.
    dy = 0.1
    yplt = []
    phiplt = []
    Explt = []
    while y < 10.:
        phi = potential(y, y, q, xq, yq)
        Ex,Ey = field(y, y, q, xq, yq)
        #print(y, Ex, phi)
        yplt.append(y)
        phiplt.append(phi)
        Explt.append(Ex)
        y += dy

    plt.plot(yplt, phiplt, label='phi')
    plt.plot(yplt, Explt, label='$E_x$')
    plt.legend()
    plt.show()
