今更、Borderlands 3のPandra’ Boxを購入してはまっていたけど、だいぶ飽きてきたのでまたPython復活。
以前C#で作ったことがある荷電粒子の磁場中の運動を3D描画するというのをPythonでやってみた。
Pythonではnumpyを導入することによって、ベクトルの演算が直接できる。(C#でもできるかも?)
また、matplotlibを導入することで、3次元のグラフ表示が簡単にできる。
というわけで、ソースがびっくりする程短くなった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# Python 3.13.2, numpy 2.2.4, matplotlib 3.10.1 # 荷電粒子の磁場中の運動 2025.4.15 import numpy as np import matplotlib.pyplot as plt dt = 0.01 # 時間の刻み n = 5000 e_m = 1 # 粒子の質量 e_c = 1 # 粒子の電荷量 pos = np.array([0.0, 0.0, 0.0]) # 粒子の位置 初期値 x=0, y=0, z=0 vel = np.array([0.1, 0.1, 0.1]) # 粒子の速度 初期値 x=0.1, y=0.1 z=0.1 mag_field = np.array([0.0, 0.0, 1.0]) # 磁場 x=0, y=0, z=1.0 track = [pos] # 軌道 for i in range(n): vel += dt * e_c/e_m*np.cross(vel, mag_field) pos += dt * vel track.append(pos.copy()) track = np.array(track) fig = plt.figure(figsize=(10,8)) ax = fig.add_subplot(111, projection='3d') ax.plot(track[1:, 0], track[1:, 1], track[1:, 2], color='red') plt.show() |
磁界の強度や電荷量、粒子の質量とかは適当に与えてみた。
3次元でも成分毎に分割して計算しなくてよく、rotの演算が簡単にでる。
3次元でも成分毎に分割して計算しなくてよく、ベクトル積の演算が簡単にでる。ベクトル解析の知識がなくても運動方程式そのままでできてしまう。
もっと前に知りたかったなぁ..