import numpy as np
import matplotlib.pyplot as plt
xmin, ymin, xmax, ymax = -4, -3, 4, 3
#réalisation du maillage de points
h = 0.01
X = np.arange(xmin, xmax, h)
Y = np.arange(ymin, ymax, h)
XX, YY = np.meshgrid(X, Y)
#Placement de la particule (charge, abscisse,ordonnée).
wires = [(-1,-2,0),(1,2,0)]
#position des vecteurs
Vect = [np.array([XX-xk, YY-yk]) for qk, xk,yk in wires]
Dist = [np.linalg.norm(Ve, axis=0) for Ve in Vect]
#formule donnant le champ E
E = sum(9E9*qk*Ve/D**2 for (qk, xk, yk), Ve,D in zip(wires, Vect, Dist))
#simplification autours des particules chargées'''
dlimit = 0.5
for D in Dist:
E[0][D<dlimit] = np.nan
E[1][D<dlimit] = np.nan
#représentation
plt.title("Champ électrostatique")
plt.axis('equal')
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
ax = plt.gca()
# Représentation de la section des fils
for qk, xk, yk in wires:
radius = .05*qk
color = 'red' if qk > 0 else 'blue'
circle = plt.Circle((xk, yk), radius, color=color)
ax.add_artist(circle)
# Représentation du champ électrique
step =50
plt.quiver(XX[::step, ::step],
YY[::step, ::step],
E[0, ::step, ::step],
E[1, ::step, ::step],scale=None)
plt.draw()
plt.show()