見出し画像

#8|正しく動け10円玉! かんたんなモデル検証からアニメーション出力まで


本記事は、こちら👇 の連載シリーズの一部です。



耳だけで楽しみたい方は、こちら👇の音声解説を再生してください😊

✨漢字の読み方など、すこし間違ってます。


この連載が目指すゴールは、コックリさんの不自然な10円玉の動きを、高校までの数学と物理を使って理論的にアニメーション化すること。

前回 は、指先から押される力をもとに、10円玉がどう動くのか(変位)を計算できるExcelモデルを作りました。

『指先から押される力』と『摩擦係数』はまだ0(ゼロ)ではありますが、まずは基本的なコックリさんモデルの出来上がりです。

ただ、セルの数値や式が本当に狙い通りに入力できているのかは、まだチェックしてません。

そこで今回は、
まずシンプルな条件で Excelモデルの動作確認(デバッグ)を行います。
そして、試しに Pythonでアニメーション にしてみます!


✔︎ Excelモデルを動作確認してみる

作ったモデルが狙い通りに動いてくれるのか、シンプルな条件を入力して検証する作業(デバッグ)は欠かせません。

前回の記事で作成したExcelモデルを、次の2つの条件で検証してみます。


▶ 条件1: 誰も10円玉に触ってないとき

前回の記事で作成した、次のExcelモデルの状態です。

  • 指先から押される力(横方向): すべての時間に対して、H列が『 0 』

  • 指先から押される力(下方向): すべての時間に対して、I列が『 0 』

誰も触ってないのと同じ。
だから、時間が経っても10円玉は動かないはず。

Q列の変位(横方向)が、ずっと 0(ゼロ) のままならOKです。

これで、勝手に動き出すような超常現象(計算ミス)がないことは確認できました。


▶ 条件2:指先から押される力(横方向)が、10円玉の質量と同じとき

次に、#4👇で導いた運動方程式を思い出してください。

その運動方程式が、こちらです。

$$
\footnotesize
\begin{align*}
\\[0.1pt]
(横方向の加速度)=& \tfrac{(指先から横に押される力)-(摩擦力)}{10円玉の質量} \\[10pt]
(摩擦力)=&(摩擦係数)×(紙から受ける垂直抗力) \\[5pt]
                 &※摩擦係数:また後日に検討 \\[10pt]
(紙から受ける垂直抗力)=&(重力)+(指先から下向きに押される力)
\end{align*}
$$

いま摩擦係数は0(ゼロ)なので摩擦力も0(ゼロ)となり、運動方程式は次のようになります。

$$
\footnotesize
\begin{align*}
(横方向の加速度)=& \tfrac{(指先から横に押される力)}{10円玉の質量}
\end{align*}
$$

10円玉の質量は、$${0.0045\ \text{kg}}$$ です。

そこで、ExcelモデルH列の『指先から押される力(横方向)』に、すべての時間に対して同じ値の 0.0045 を入力します。

こうすると、

$$
\footnotesize
\begin{align*}
(横方向の加速度)=& \ 1
\end{align*}
$$

になるので、この横方向の加速度を使って速度(横方向)を求めると、次のようになります。($${t}$$:時間)

$$
\footnotesize
\begin{align*}
速度(横方向)=& \int(横方向の加速度)dt +初期速度 \\[10pt]
=& \int 1\ dt +0\\[10pt]
=& \ t \\[10pt]
\end{align*}
$$

さらに、この速度(横方向)を使って変位(横方向)を求めると、次のようになります。

$$
\footnotesize
\begin{align*}
変位(横方向)=& \int 速度(横方向)dt+初期変位 \\[10pt]
=& \int t\ dt +0\\[10pt]
=& \tfrac{1}{2}t^2 \\[10pt]
\end{align*}
$$

だから $${t = 1.0}$$ 秒のときの変位は、

$${x =\tfrac{1}{2} \times 1.0^2 = 0.5\ \text{m}}$$

となります。

ExcelモデルG列の時間が『1.000000』 の行を見て、Q列の変位(横方向)が『 0.5 』になっていればOKです。

Excelでの積分計算には誤差があるのでピッタリ 0.5 になりません。
しかし、計算過程にミスがあると、これほどシンプルな条件でも答えは大きくズレてしまいます。

もし答えが大きくズレてしまったときは、設定値や各セルに入力した式に間違いがないか、もう一度ゆっくりチェックしてみてくださいね。


✔︎ Pythonでアニメーションにしてみる

いよいよPythonで計算結果をアニメーションにしてみます。

まずは、アニメーションにする計算結果を準備するところから。

動作確認したExcelファイルをコピペして、以下の作業をします。

元ファイルは大切に保存しておいてください。


  • 指先から押される力(横方向)を入力する
    10円玉を動かしたいので、テキトーに何かしらの値を入力します。
    たとえば、ExcelのH4セルに次の式を入れて、これを一番下までコピー。
    ※G4セルは、その行の『時間』を表しています。

=0.02*COS(2*PI()*0.5*G4)
  • 時間の細かさを調整する
    時間刻み($${\Delta t}$$)を、一時的に 0.001 [s] に変更します。
    ※今回は計算値の変化が緩やかなはずなので、これくらいの間隔で計算します。

これで準備が完了しました。

Excelファイルを保存して、必ず閉じてください。


そして、Pythonの出番です。

アニメーションの出力用に作成したPythonスクリプトなどのファイル一式は、👇のダウンロードエリアから入手できます。

スクリプトの中身はとてもシンプル。

Excelのデータを読み込んで、10円玉に見立てた『赤い円』をコックリさんの盤面画像の上でパラパラ漫画のようにリアルタイムで描いていくだけ。

処理の詳しい解説は、スクリプト内に日本語で丁寧に書いたので、ここでは割愛します🙇‍♂️

そのPythonスクリプトでアニメーションにしたのが こちら👇

10円玉に見立てた『赤い点』が、コックリさんの盤面上で滑らかに揺れていますね!


✔︎ おわりに

コックリさんの10円玉は、こんなに滑らかには動きません。

もっと不規則で、ぎこちない動き方をします。

ここで、これまでExcelモデルを作ってきた過程を思い返してみると…

まだ仮の値しか使っていない物理的な要素がありましたね?

それは、次の2つです。

  • 10円玉が指先から押される力

  • 摩擦力(摩擦係数)

試しにAIに聞いてみたところ、『摩擦力を加えれば不規則な動きになりますよ』と、もっともらしい答えが返ってきました。

でも、ちょっと待ってください。

摩擦力はあくまで動きにブレーキをかける力です。
新たに不規則な動きを生み出す力ではありません。

それに、つるつるの紙と10円玉との間に、それほど大きな摩擦力が働くものでしょうか?

実際に紙の上に10円玉を置いて指先で押してみると分かるのですが、10円玉は軽々と動きます。

意識的に10円玉を紙に押し付けなければ、摩擦による抵抗はあまり感じません。

そこで次回は、もう一方の要素… 10円玉が指先から押される力 に焦点を当てて考えていきます。

どうぞお楽しみに!


🔗 次の記事につづく



少しでも参考になったり
続きが気になったりしたら、
スキやフォローしていただけると
次の記事を作成する励みになります!




いいなと思ったら応援しよう!

数理モデル屋 もし具体的に何かのお役に立てたなら、チップで応援していただけると励みになります! いただいたチップは、今後の活動に使わせていただきます😊