###################################################################

# 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()