tkinterのcanvasを使って斜めにボールを投げた時の飛距離を計算する
■はじめに
前回、tkinterのcanvasで図形を描く方法とその図形を動かす方法を紹介しました。
今回は前回の図形を動かす機能を使って、ボールを斜めに投げた時の挙動をcanvasを使ってシミュレーションしたいと思います。
■コード
左下の角がスタート位置で、そこから右斜め(45°方向に初速30[m/s])にボールを投げた時のシミュレーションを行います。
実行すると以下のように四角が動きます。
(今回も動画の載せ方が分からないので画像です)
また飛距離を計算したのが以下になります。
理論値が91.7431...なのでまあまあ近いですね。dtをもっと細かくしていけばより理論値に近づくはずです。(といってもこの程度なら計算した方が早いのでシミュレーションするほどでもないですが...笑)
■買って良かったもの紹介
今回紹介したmatplotlib以外にもpandasやBokehなどのモジュールの使い方が書かれている本です。
公式リファレンス等もありますし、ネットで探せばいくらでもモジュールの使い方・書き方は見つかりますが、一冊くらいこのような本を手元に持っておくと便利です。
pythonを初めて触ろうとした時に読んだ本を紹介します。
この本は、初心者に最適だと思います。確か亀を動かすゲームのようなコードが載っていたと思います。pythonをこれから始めようと思っている人は読んでみて下さい。
また下の入門python3も良い本だと思いますが、分厚いので中々根気が必要です。個人的には最小限必要なことが書いてある薄い本を読み、必要になってからちょっとずつ知識を増やしていくのが良いと思います。
また何度も紹介しますが、以下のニューラルネットワーク自作入門は非常に良い本です、pythonの書き方から記載されているのでいきなり読んでも大丈夫だと思います。
とりあえず基本的なコードの書き方さえ分かってしまえば、後はネットで知りたい情報にアクセスする方が早いと思います。
■説明
主に前回からの変更点は以下になります。
距離=速度×時間
速度=加速度×時間
の式になっています。
より詳しく言うと、dx/dt=Vなので、dx/dt ≒ (x-x')/Δtと離散化すると(x'がt-1でのx座標,xがtでのx座標)、x=V×Δt+x'になります。つまり前回のx座標に速度×微小時間の値を足すと現在のx座標になるということです。
同様に加速度についても、dV/dt=aなので、dV/dt ≒ (V-V')/Δtと離散化すると(V'がt-1での速度,Vがtでの速度)、V=a×Δt+V'になります。
上記を詳しく知りたい方は数値計算の分野になるので調べてみて下さい。
よく非定常の熱伝導方程式を解く例や、反応速度を用いて化学種の計算をする時などに使われている気がします。