見出し画像

Pythonでベクトルを描画する

ベクトルの計算は、はじめは図解にしたほうがイメージしやすいと思われます。そこでmatplotlibを使って描画するプログラムを作成してみました。

ベクトルの和を計算

matplotlibのオブジェクト指向スタイルを使い、描画はquiverオブジェクトが便利です。

import numpy as np
import matplotlib.pyplot as plt
o = np.array([0, 0])
v_x = np.array([4, 1])
v_y = np.array([2, 3])
vector = [(o, v_x, 'b'), (o, v_y, 'g' ), (o, v_x+v_y, 'r'),(v_x,v_y, (0.0,1.0, 0.0,0.4)),(v_y,v_x, (0.0,0.0, 1.0,0.4))]
fig ,ax= plt.subplots(figsize=(6,6)) 
for tail, head, color in vector:
    ax.quiver(*tail,*head,
               color=color, units='xy', scale=1,linestyles='dashed',  linewidth=1)
ax.set_title('vector sum', fontsize=20)        
ax.set_xlabel('x') # x軸ラベル
ax.set_ylabel('y') # y軸ラベル
ax.set_xlim(0, 6.5)
ax.set_ylim(0, 6.5)

plt.show()

画像1

簡単に描画できますが、なぜか点線がうまく出ません。仕方ななく、補助的なベクトルは薄い色にしました。

ベクトルの差を計算

差のベクトルも簡単に描くことができます。

vector = [(o, v_x, 'b'), (o, v_y, 'g' ), (v_x, v_y-v_x, 'r')]
fig ,ax= plt.subplots(figsize=(6,6)) 
for tail, head, color in vector:
    ax.quiver(*tail,*head,
               color=color, units='xy', scale=1,linestyles='dashed',  linewidth=1)
ax.set_title('Vector difference', fontsize=20)        
ax.set_xlabel('x') # x軸ラベル
ax.set_ylabel('y') # y軸ラベル
ax.set_xlim(0, 4.5)
ax.set_ylim(0, 4.5)
plt.show()

画像2

3次元のベクトル

projection='3d'を使うと3次元のベクトルも描画することができます。

import numpy as np
import matplotlib.pyplot as plt
o = np.array([0, 0,0])
v_x = np.array([4, 1,5])
v_y = np.array([2, 3,6])
vector = [(o, v_x, 'b'), (o, v_y, 'g' ) ]
fig = plt.figure(figsize=(8, 8)) # 図の設定
ax = fig.add_subplot(projection='3d')
for tail, head, color in vector:
    ax.quiver(*tail,*head,
               color=color,   linewidth=3)
ax.set_xlabel('x') # x軸ラベル
ax.set_ylabel('y') # y軸ラベル
ax.set_zlabel('z') # z軸ラベル
ax.set_title('quiver(x, y, z, u, v, w)', fontsize=20)      

ax.set_xlim(0, 6)
ax.set_ylim(0, 6)
ax.set_zlim(0, 6)

plt.show()

画像3

結果は今一つ、見た感じも少しずれていますし、どうやったら軸の回転ができるかなど、まだまだ探る必要があります。

詳しくは次を参照してください。

Pythonによるベクトルの和の計算

この記事が気に入ったらサポートをしてみませんか?