###################################################################
# pythonでベクトル場を描く
# https://qiita.com/sci_Haru/items/21777764ae50996abd95#comments
###################################################################
import matplotlib.pyplot as plt
import numpy as np
plt.figure() # for 2D (3Dは違うので注意)
LX, LY = 4.0, 4.0 # グラフを描く範囲の指定
gridwidth = 0.25 # グリッド間隔
X, Y, = np.meshgrid(
np.arange(-LX, LX, gridwidth),
np.arange(-LY, LY,gridwidth)) # メッシュ生成
R = np.sqrt(X**2+Y**2) # 原点から(X,Y)までのの距離を定義
#点電荷1の位置座標と電荷
X1,Y1 = 1.2,0.0 # 電荷1を置く座標
Q1=-2.0 # 電荷量の設定
R1=np.sqrt((X-X1)**2+(Y-Y1)**2) # 電荷1から任意の点(X,Y)までの距離
plt.plot(X1,Y1,'o',color='green') # 点電荷1を緑点で描画
#点電荷2の位置座標と電荷
X2,Y2 = -1.2, 0.0 # 電荷1を置く座標
Q2=+2.0
R2=np.sqrt((X-X2)**2+(Y-Y2)**2) # 電荷2から任意の点(X,Y)までの距離
plt.plot(X2,Y2,'o',color='blue') # 点電荷2を青点で描画
#ベクトル関数の設定。F(U(x,y), V(x,y))を定義。両電場の重ね合わせ。
U = Q1*(X-X1)/(R1**2)+Q2*(X-X2)/(R2**2)
V = Q1*(Y-Y1)/(R1**2)+Q2*(Y-Y2)/(R2**2)
plt.quiver(X,Y,U,V,color='black',angles='xy',scale_units='xy', scale=5.0)
# ベクトル場をプロット X, Y starting position, U, V vector
plt.xlim([-LX,LX]) # 描くXの範囲
plt.ylim([-LY,LY]) # 描くyの範囲
# グラフ描画
plt.grid()
#plt.draw()
plt.show()