はじめに
matplotlibのFuncAnimationで自由落下と反発係数を考慮したバウンドのアニメーションを表示する。
コード
解説
モジュールのインポートなど
バージョン
時間データの作成
np.arangeで15sまで0.05刻みで時間データを作成する。配列のサイズは300となる。
重力加速度は9.8 m/sとした。
自由落下時の位置変化
初期位置を100とした場合、地面に到着する時間はt_posi0となる。
地面に到着する時間のときのtにおけるインデックスを求める。
np.argmin(np.abs(t-t_posi0))で求められる。
自由落下の位置変化を表示すると以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2020/06/rakka1.jpg)
バウンド時の位置変化
反発係数を0.8として、衝突前のスピードと衝突後のスピードを求める。
位置変化は以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound0.jpg)
np.where(b1_z>0)[0][-1]で位置が正の値の位置の最後のインデックスを求めて、位置データをスライスして表示すると下記のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound1.jpg)
2回目のバウンド
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound2.jpg)
3回目のバウンド
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound3.jpg)
4回目のバウンド
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound4.jpg)
5回目のバウンド
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound5.jpg)
6回目のバウンド
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound6.jpg)
位置データの連結
np.concatenate()で全ての位置データを連結する。図示すると以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2020/06/bound7.jpg)
データの大きさは627となる。
アニメーションで表示
ax.hlines(0,-.25,.25)でy=0の位置に平行線を表示する。
ax.spines[‘right’].set_visible(False)などで左以外の軸を消す。
アニメーション関数の設定
set_ydataでplot(ball1)のydataをセットする。
アニメーションの表示
FuncAnimationでアニメーションを表示する。frame数を627、intervalを10msとし、6秒少々のアニメーションとする。 HTML(ani.to_html5_video())
により、jupyter notebook またはjupyter lab上にアニメーションを表示できる。
ani.save(‘ファイル名’, writer=”ffmpeg”,dpi=100)でアニメーションをMP4形式で保存することができる。
反発係数を0.5とした場合
反発係数を0.95とした場合
参考
![](https://res.cloudinary.com/bend/image/upload/f_auto/v1615202390/manabitimes/original/thumbnail/note/1106_2icoe6.png)
![](https://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Colorful_Super_ball.jpg/640px-Colorful_Super_ball.jpg)
コメント