[matplotlib animation] 21. 3Dグラフで斜方投射 (Projectile motion)

matplotlib Animation

はじめに

この記事では、Matplotlibライブラリを使用して3Dグラフ上で斜方投射のアニメーションを作成する方法について解説します。FuncAnimationを用いて、物体が空中を放物線を描いて移動する様子を視覚的に表現します。物理法則に基づいた運動をプログラムで再現し、3D空間でのグラフィカルな表示方法を学ぶことができます。

コード

解説

モジュールのインポート

3Dグラフの設定

球データの生成

[matplotlib 3D] 18. 3D surfaceプロットで球を表示
matplotlibのmplot3dを使用して3Dグラフ上にsurface plotで球体を表示する方法を解説します。球の方程式からメッシュグリッドを作成し、3次元空間に美しく球体を描画する手順を紹介します。

上記に基づいて球データを作成しています。球体が底面に接するよう、z座標に半径(r)を加えています。

各種パラメータの設定

初速度をv0、重力加速度を9.8 m/s²、打ち上げ角度を60°(π/3)とした場合、物体が発射されてから地面に戻ってくるまでの時間(t)は、以下のようになります。

$$t = \frac{2v_0 sin\theta}{g}$$

グリッドと軸ラベル、アスペクト比の設定

球の最高到達点の高さ(h)は、

$$h = \frac{v_0^2 sin^2\theta}{2g}$$

となるので、これに基づいてxyzの範囲を設定します。

アニメーションの設定

アニメーションを表示するためのグラフのリストを作成します。

アニメーションでは古いプロットを消す必要があるため、グラフのリスト(ball_1)にグラフが存在する場合は.remove()メソッドで削除します。

tの値が順次変化するにつれて、それに対応するx座標とz座標を計算し、連続的にプロットしていきます。

zの位置は以下のように計算されます。

$$z = v_0 sin\theta \times t -\frac{1}{2} gt^2$$

xの位置は↓のようになります。

$$x = v_0 cos\theta \times t $$

作成したプロットをリスト(ball_1)に格納することで、アニメーションを効果的に表示することができます。

アニメーションの表示

FuncAnimationを使用してアニメーションを表示します。updateを50ステップ実行してアニメーションを生成します。intervalが100msに設定されているため、全体で5秒のアニメーションとなります。

Jupyter Notebook上ではHTML(ani.to_html5_video())を実行することで、アニメーションを直接表示できます。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

Matplotlibのアニメーション機能と3Dグラフを組み合わせることで、物理現象をわかりやすく視覚化できることがわかりました。斜方投射という基本的な物理現象をプログラミングで表現することで、シミュレーションの基礎を学ぶことができます。

参考

斜方投射をわかりやすく解説!運動方程式や例題も|高校生向け受験応援メディア「受験のミカタ」
今回は斜方投射を解説します。斜方投射は非常に出題頻度が高く、確実にマスターしなければなりません。マスターしてしまえば得点源になる分野ですのでここで学んで解法を身につけましょう!

コメント