Python

【Pyxel】Pythonで物理シミュレーションをしよう! Day 4 -復元力-

pyxelで物理シミュレーション

こんにちは!

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

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

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

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

くるる
くるる
ついに”Day4”まできた♪
はやぶさ
はやぶさ
今日も楽しく物理シミュレーションを実践しましょう!

前回までに学んだこと

”Day3”の記事では「地面に反発する猫」の物理シミュレーションを実践しました。

Pythonで反発の物理シミュレーション
くるる
くるる
猫が固い地面でスーパーボールのように弾むのが可愛い♪

本記事では「トランポリン(柔らかい地面)で弾む猫」の物理シミュレーションを実践します。

Pythonでトランポリンの物理シミュレーション
くるる
くるる
めっちゃ可愛い!!
くるる

「トランポリンで弾む猫」をキラキラした瞳で見つめる”くるる”ちゃんが今日も可愛い(*・ω・)ノ♪

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

うーん。。

くるる
くるる
「反発」と「トランポリンで弾む」って似ているような…似てないような…?
Pythonで反発の物理シミュレーション  Pythonでトランポリンの物理シミュレーション

”Day3”記事で説明した”反発”は反発係数を使って速度が変化する物理シミュレーションでした。

今回は”トランポリンのばね”により、猫に加わる力が変化する物理シミュレーションです。

くるる
くるる
この前”ばね”について勉強した知識が役に立つかも!

正解!

スポンサーリンク

【復習】ばねの特性と復元力

“ばねの特性”については、以下の記事で説明済みです。

Pyxelでレトロゲームを作る7
【Pyxel】Pythonでレトロゲームを作ろう! Day 7 -人工知能-こんにちは! 前回こんな記事を書きました↓ https://cpp-learning.com/pyxel_c...
くるる
くるる
覚えてるよ!”ばねの特性”と”P制御”がリンクして面白かった♪

大正解!なので、本記事では復元力の概要のみ説明します。

ばね

”Day1”の記事で説明した通り、猫には重力という力が加わっています。

また、”ばね”には縮んだり・伸びたりしたとき、元に戻ろうとする復元力という力が発現します。この復元力『フックの法則』より、算出することができます。

【フックの法則】

F = k・x(復元力:F, 自然長からの長さ:x, ばね定数:k)

技術や知識の積み重ねが大事です!

物理シミュレーション -復元力-

次は、トランポリン(復元力)の物理シミュレーションを考えてみます。

総復習

本記事の内容は、”Day1~Day3”記事で学んだ知識を総動員します!

くるる
くるる
”Day1~Day3”記事の内容を整理してみたよー

Pythonで物理シミュレーションをしよう!-Day1-

物理(力学)の基礎を学び、物理シミュレーションの『雛形ソースコード』を使って自由落下運動の物理シミュレーションをPyxelでアニメーション化する

pyxelで物理シミュレーション
【Pyxel】Pythonで物理シミュレーションをしよう! Day 1 -自由落下-こんにちは! 以前『Pythonでレトロゲームを作ろう!』シリーズの記事を書きました。 https://cp...

Pythonで物理シミュレーションをしよう!-Day2-

猫と地面(物体同士)の当たり判定を学び、物体同士が衝突した後の物理シミュレーションを実践

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

Pythonで物理シミュレーションをしよう!-Day3-

物体同士が衝突して反発する物理シミュレーションを実践

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

”Day1~Day3”記事の内容を理解できていれば、以降の説明もスムーズに理解できます。まだ、”Day1~Day3”記事を読んでいない人は先に読むことをオススメします!

くるる
くるる
『繰り返す!技術や知識の積み重ねが大事!』ですよね?はやぶさ先生♪

大正解!

トランポリンの物理シミュレーション -当たり判定-

「トランポリン」≒「ばね」というイメージで話を進めます。

”Day1~Day3”までは猫と地面との当たり判定でしたが、今回は猫とばねとの当たり判定です。

ただし、猫が当たる対象が地面でもばねでも当たり判定の条件式は同じなので、今まで使ってきた以下の【当たり判定のソースコード】を流用することができます。

なので、本記事ではトランポリンに当たったときの処理のみを考えます。

くるる
くるる
はやぶさ先生と勉強してると本当に『技術や知識の積み重ねが大事!』というのが実感できる!
はやぶさ
はやぶさ
嬉しい言葉をありがとう!

テストで高得点とってお仕舞!とせずに…

  • 学んだ知識がどこで活かせるか?
  • この課題は過去に修得した知識や技術で解決できないか?

などを考えられるフクロウになってほしいです!

くるる
くるる
くるる
やる気満タンです!

”くるる”ちゃんのモチベーションは今日も大樹のように高い!!

過去に開発したソフトウェアやネット上で公開しているソースコードを参考にして、効率良く作業できると良いですね

トランポリンの物理シミュレーション -衝突後の処理-

続いて、猫とトランポリンが当たったときの処理を考えてみます。

Pythonでトランポリンの物理シミュレーション

猫には常に”重力”が加わっていますが、ばねに当たったときは復元力も加わります。

数式に落とし込んでみます。

【重力の運動方程式】

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軸の向きに注意

くるる
くるる
完全に理解した!じゃあソースコードはこんな感じでだね↓

正解!今回はパラメータ定義を以下のように設定しています。

【各パラメータ】

  • 猫の質量:m = 1 [kg]
  • 重力加速度:g = 9.8 [m/s^2]
  • ばね定数:k = 10 [N/m]

繰り返しですが、トランポリンに当たっているときに、猫に加わる力は以下の式で算出できます。

【トランポリンに当たったときの運動方程式】

F = m・g k・x

はやぶさ
はやぶさ
”くるる”ちゃん猫が上に弾むときの最小変位xを求められるかな?
くるる
くるる
任せて―

以下の式に各パラメータを代入して…

【トランポリンに当たったときの運動方程式】

F = m・g k・x

F = 1*9.8 10・x

猫に力が加わっていない状態(F = 0)なら、猫は静止するはずなので…

0 = 1*9.8 10・x

10・x = 9.8

x = 0.98

変位がx = 0.98で静止する!

はやぶさ先生の出題は「猫が弾むときの最小変位xを求めること」です。

つまり、『復元力 > 重力』を求めて猫に上向きかかる力の境界条件を求める!

10・x > 9.8

x > 0.98

できた!変位xが0.98より大きいときに猫が弾む!

最近、三歳になった”くるる”ちゃん天才なのでは?

はやぶさ
はやぶさ
大正解すぎて私の出番がなかった…

少し補足すると本シリーズの物理シミュレーションでは「1pixel = 1m」でアニメーション化しています。

つまり、猫が1[pixel]でもトランポリンに食い込めば弾むようにk=10[N/m]を設定しました。

くるる
くるる
くるる
いい加減にばね定数を決めてたわけじゃないのか!物理たのしい♪
  • 慌てないで!一つずつ丁寧に理解していきましょう!
  • 基礎から”しっかり”理解できれば、応用もできます!!
  • くるるちゃんのように本記事で楽しく物理を勉強してほしい!!!
くるる
くるる
一緒に勉強しよー
スポンサーリンク

最終的に完成したソースコード -トランポリンで弾む猫-

最終的に完成した「トランポリンで弾む猫」のソースコードが以下です。

”Day1~Day3”の記事で作成したソースコード同様、画像上の任意の位置でマウス左クリックすると猫が自由落下する物理シミュレーションを楽しめます(*・ω・)ノ♪

高い位置から落下させたとき、低い位置から落下させたときに「猫がどんな運動をするのか?」を観測してみてくださいね。

おわりに

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

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

本記事をきっかけに「物理」や「プログラミング」に興味をもってくれる人が増えたら最高に嬉しいです!

くるる
くるる
pyxelを使った”はやぶさ先生”のチュートリアル記事は、どれも最高に楽しいよー♪どんどん学びたくなっちゃう
くるる
はやぶさ
はやぶさ
”くるる”ちゃんと一緒に勉強できて楽しかった!という読者もいると思うよ!
くるる
くるる
わーい♪
くるる
くるる
駆け出しエンジニア”くるる”@kururu_owl は頑張る理系を応援します!一緒に勉強しよー♪

(あ…いつもセリフとられた!笑)

”Day4” 完

スポンサーリンク

次回予告(?)

『Pythonで物理シミュレーションしよう!』シリーズ記事ですが、次回が最終回になります。

”Day5”まで書けば、キリ良く「約1週間で完結するチュートリアル」といえるので!笑

くるる
くるる
本記事”Day4”の「トランポリンで弾む猫」の物理シミュレーション最高に楽しかったけど…最終回はさらに上をいくんだよね?
くるる

お…おう!次回は…

くるる
くるる
待って!知りたいけど…知りたくない!最終回は何も知らない状態から楽しみたい♪

分かった!次回の内容はシークレットにしよう(ソースコードが未完成だから公開できないわけじゃないよ…笑)

本記事楽しかったかな?次回もお楽しみに~

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

フクロウのLINEスタンプ

当サイトのマスコットキャラクター

「フクロウのくるる」が

LINEスタンプになりました!

勉強で疲れたあなたに癒しをお届け☆

お迎え待ってます(*・ω・)ノ♪

今すぐお迎えする

40個セットがたったの50コインとお得です