Python PR

【Pyxel】Pythonで物理シミュレーションをしよう! Day 6 -減衰力-

pyxelで物理シミュレーション
記事内に商品プロモーションを含む場合があります

こんにちは!

くるる
くるる
人気フクロウの”くるる”@kururu_owl だよー
はやぶさ
はやぶさ
現役エンジニアの”はやぶさ”@Cpp_Learningです

前回こんな記事を書きました↓

pyxelで物理シミュレーション
【Pyxel】Pythonで物理シミュレーションをしよう! Day 5 -復元力2-こんにちは! 前回こんな記事を書きました↓ https://cpp-learning.com/pyxel_p...

本記事は『Pythonで物理シミュレーションをしよう!』シリーズの”Day6”です!

くるる
くるる
本記事が最終回だよー。ホントだよ!

くるるちゃんの言う通り、約1か月続いた『Pythonで物理シミュレーションをしよう!』シリーズは本記事で最終回です。

はやぶさ
はやぶさ
最後まで楽しく物理シミュレーションを実践しましょう!

前回までに学んだこと

”Day5”の記事では「バンジージャンプする猫」の物理シミュレーションを実践しました。

Pythonでバンジージャンプの物理シミュレーション

今回も「バンジージャンプする猫」ですが、猫の移動量が減衰し、最終的に猫が静止する物理シミュレーションになっています。

Pythonでバンジージャンプの物理シミュレーション
くるる
くるる
猫がいつまでも”びよんびよん”してたら可哀想だもんね♪

猫を心配する”くるる”ちゃんが今日も可愛い(*・ω・)ノ♪

【Day6】Pyxelで物理シミュレーション

Pythonでバンジージャンプの物理シミュレーション  Pythonでバンジージャンプの物理シミュレーション
くるる
くるる
同じバンジーなのに違いがあるの面白いね♪
くるる
くるる
くるる
どちらの運動方程式も基本は同じだと思うけど、最終的に「猫が静止する」というのを「速度が0になる」と考えると…速度に応じて移動量を減衰させる力が働いた」と考えれば良い気がする!

くるるちゃん鋭い!色んな勉強方法がありますが、プログラミング/データサイエンス/シミュレーションなどトライ&エラーを実践しやすいものは、以下の勉強方法が良いと考えています。

  1. 仮説を立てる(こうじゃないか?という自分の考えをもつ)
  2. 立証する(実践じゃーーー!)

【復習】バンジーロープと復元力(知識の整理)

くるるちゃんの仮説速度に応じて移動量を減衰させる力が働いた」を立証する前に、知識を整理します。Pythonでバンジージャンプの物理シミュレーション

猫が静止しない”Day5”バンジー運動方程式は以下の通りでした。

【重力の運動方程式】

f1 = m・g (質量:m[kg], 重力加速度g[m/s^2])

【復元力の運動方程式】

f2 = k・x (ばね定数:k[N/m], 変位x[m])

【バンジーの運動方程式】

F = f1 f2  

F = m・g  k・x

※y軸の向きに注意

知識を整理することが課題解決の近道になることがあります。定期的に自分の知識や技術を整理し、後戻りの少ないアプローチで課題を解決したいですね。

以下2点を検討し、知識を整理することが課題解決の近道になるときがあります

  1. 自分がどんな知識や技術を習得しているか?
  2. 目の前の課題や問題は、習得済みの知識や技術で解決できなか?

【仮説】バンジーロープと減衰力

続いて”くるる”ちゃんの仮説速度に応じて移動量を減衰させる力が働いた」を図で表現します。

Pythonでばね・マス・ダンパ系の物理シミュレーション

速度に応じて力が発生し、かつ移動量を減衰させる方向に働く”減衰力”を追記しました。

これを数式に落とし込みます。

【重力の運動方程式】

f1 = m・g (質量:m[kg], 重力加速度g[m/s^2])

【復元力の運動方程式】

f2 = k・x (ばね定数:k[N/m], 変位x[m])

【減衰力の運動方程式】

f3 = c・v (減衰系数:c[N/m/s], 速度v[m/s])

【バンジーの運動方程式】

F = f1 – f3 f2  

F = m・g – c・v  k・x

※y軸の向きに注意

はやぶさ
はやぶさ
くるるちゃん”-c・v”の符号は間違ってないかな?
くるる
くるる
”Day5”で学んだから、もう間違えない!

くるるちゃんは理解できているようですが、念のため説明します。

猫が天井よりも下にいるときは、ばねの復元力で猫が上方向(y軸と反対の向き)に移動します。

つまり、猫の移動速度は負になります。具体的な数値”v = -2”を代入して、力の方向を確認します。

【減衰力の運動方程式】

f3 = c・v

f3 = c・(-2)

【バンジーの運動方程式】

F =f1 – f3 f2

F =m・g – c・(-2) k・x

F =m・g + 2・c  k・x

重力と減衰力が正(下方向)復元力が負(上方向)になることを確認できました(*・ω・)ノ♪

最後はソースコードに落とし込みます。

コメントアウトしているコードは”Day5”の運動方程式です。ベースが同じ運動方程式に減衰力を追加するだけで、別のシミュレーションになることを理解してほしいので、あえて消さずに残しておきました

スポンサーリンク

最終的に完成したソースコード -バンジー猫(減衰あり)-

最後はソースコードを作成して物理シミュレーションを実践じゃーーー!

意図した動き…今回の場合は猫の移動量が減衰し、最終的に静止する物理シミュレーションを実現できれば、仮説を立証できたことになります。

くるる
くるる
立証できたどー
はやぶさ
はやぶさ
大変よくできました!

減衰力とは

今回くるるちゃんが閃いた速度に応じて移動量を減衰させる力」というのは「減衰力」と呼ばれている力で、教科書にも載っている一般的によく知られた物理現象です。

減衰力

”Day4”記事のサブタイトル「復元力」については、ばねを例に説明しました。

本記事のサブタイトル「減衰力」については、竹筒の底に穴を空けたタイプの水鉄砲を例に説明します。(この例が伝わらなかったらジェネレーションギャップを感じてしまう…)

減衰力上図の通り、「穴から出ていく水量(体積)」と「力を加えて押された水量(赤破線の体積)」は同じになります。

より正確には「単位時間当たりの水量が同じ」になります。

もし、多くの水を出すために、強い力を加えたとしても、穴の大きさは常に同じなので、出ていく水量は変わりません。

むしろ、ピストンを素早く動かして赤破線の体積を大きくしようとすればするほど「減衰力」が大きくなります。

これを数式で表現すると速度に比例して「減衰力」が大きくなる以下の式になります。

【減衰力の運動方程式】

f = c・v (減衰系数:c[N/m/s], 速度v[m/s])

バンジーの運動方程式で説明済みの式ですね。

この水鉄砲と同じ原理で減衰力を発生させ、新幹線や建物の振動を減衰させる「ダンパー」という装置があります。

ただし、今回のバンジーロープのようにダンパーが存在しなくても、「空気抵抗」や「材料特性」・「(建物などの)構造」により、振動していた物体は自然に減衰する場合がほとんどです。

ダンパーの有無や各種の影響により、減衰係数の大きさは異なりますが、振動が減衰するときに発生している減衰力は、上の式で表現できる場合が多いです。

いつもは冒頭で説明している理論の説明を本記事では終盤にしました。その意図とは…?本記事の【あとがき】で説明しますね。

おわりに

『Pythonで物理シミュレーションをしよう!Day6 -減衰力-』について説明しました。

pyxelを使って、楽しく「物理」や「プログラミング」の勉強ができると良いなーとか考えながら、本シリーズを書きあげました。

約一週間(6日間)で完結し、Step by Stepでレベルアップできるチュートリアルに仕上げました(全記事ソースコード付)

くるる
くるる
”くるる”は本シリーズで楽しく勉強してレベルアップできました♪もっと勉強したい!

くるるちゃんのように楽しく勉強してくれた人がいたら、とても嬉しいです!そして、もっと勉強したい!という人がいたら最高に嬉しいです!!

はやぶさ
はやぶさ
理系応援ブロガー”はやぶさ”@Cpp_Learningは頑張る理系を応援します!

『Pythonで物理シミュレーションをしよう! 』シリーズ(完)

次回予告がないので、【あとがき】を書きました。時間がある人は以下も読んでみてね。

【あとがき】本シリーズの最終回に込めた想い

チュートリアルというのは、以下のストーリで説明する場合が多いです。

【チュートリアルのストーリー展開】

  1. 概要説明
  2. 理論説明
  3. 実践(シミュレーション)

本シリーズ記事も例外ではなく、”Day1”~”Day5”までは上記のストーリーで説明しました。

しかし、最終回の本記事は以下のストーリで説明しました。

【最終回(本記事)のストーリー展開】

  1. 未知の現象に対し、仮説をたてる
  2. 物理シミュレーションを実践して仮説を立証
  3. 理論説明

これは”答え”の分からない課題を解く場合のアプローチと同じです。

教科書や論文で得た知識を”そのまま”課題解決に活かせる場合もありますが、現時点で習得していない知識が必要な課題(壁)にぶつかるときがあります。

ジグソーパズルその場合、以下のことを検討するのが課題解決の近道になるかもしれません。

  • 現時点で習得している知識で課題を解決できないか?
  • どんな知識や技術を新規に習得すれば、課題を解決できるか?

ジグソーパズルで例えると以下の通りです。

  • 手持ちの要素技術ピースで解決できるか?
  • 欠けているピースは何か?

”欠けているピース”を「リサーチして見つける」か「独自の数式モデルやアルゴリズムを作成する」かはケースバイケースですが…

物理の勉強を始めたばかりの”くるる”ちゃんは「減衰力」というピースを持っていませんでした。しかし、速度に応じて移動量を減衰させる力が働いた」という仮説を立て、”欠けているピース”としました。

あとは、”欠けているピース”を図や数式で表現した後、最終的にはソースコードを作成し、物理シミュレーションを実践することで、仮説を立証しました。

つまり、”欠けているピース”を自分の”手持ちのピース”に加えることに成功しました。

今後、くるるちゃんが本シリーズで紹介していない物理シミュレーションに挑戦するとき、今度は「手持ちの減衰力ピース」を用いて、簡単に実践できるかもしれませんね♪

本シリーズをきっかけに「物理」や「プログラミング」に興味をもってくれた人が、新しい何かに挑戦したいと思ったとき…本記事のアプローチが参考になるかもしれません。

本記事を読んでくれた全ての人が、自力で課題を解決できる(自走できる)人になってほしいと願っています。

自分のペースで「要素技術のピース」を増やしていき、あらゆる課題を解決できる人に成長して下さいね。

くるる
くるる
くるるも頑張るし、みんなのこと応援しているよ!
はやぶさ
はやぶさ
私も”くるる”ちゃんと同じ想いです。

以上 某企業の研究所に勤務する現役エンジニア兼メンターからのメッセージでした。

(完)

pyxelで物理シミュレーション
【Pyxel】Pythonで物理シミュレーションをしよう! Day 5 -復元力2-こんにちは! 前回こんな記事を書きました↓ https://cpp-learning.com/pyxel_p...
Pyxelでレトロゲームを作る 総集編
【Pyxel】Pythonでレトロゲームを作ろう! 総集編 -まるっと1週間でゲーム開発入門-Python向けのレトロゲームエンジン:pyxelを用いたゲーム開発入門チュートリアル(ソースコード付き)を書きました。画像処理・数学・物理・制御について学び、実践としてゲームプログラミングまで行います。...
python(pygame)でゲームを作る
【Python】ゲームソフト開発を題材にしたオブジェクト指向入門ゲームソフト作成を題材にした「オブジェクト指向」の入門記事を書きました。オブジェクト図/クラス図の書き方や考え方のポイントも説明した実践的な内容になっています!ソフトウェア設計やソフトウェア開発を学びたい人にオススメの記事です!...
Processing
【Processing入門】画像処理プログラミングでプロモーションビデオ作成教育用途やデジタルアートなど様々な用途があるプログラミング言語Processingの入門チュートリアルを作りました。オリジナル動画を作るためのサンプルコードも公開しています。...
ソフトウェア開発入門
【ソフトウェア開発入門チュートリアル】OpenCVとPythonで『物体追跡カメラ』を作るソフトウェア開発入門のチュートリアル記事を書きました。本記事では、OpenCVとPythonを使った『物体追跡カメラ』の開発を題材に、開発プロセス・設計・実装(コーディング)などのソフトウェア開発に関する知識を一通り学べる内容になっています。...

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python