Python PR

【Pyxel】Pythonで物理シミュレーションをしよう! Day 3 -反発-

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

こんにちは!

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

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

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

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

くるる
くるる
わーい♪
はやぶさ
はやぶさ
今日も楽しく物理シミュレーションを実践しましょう!

前回までに学んだこと

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

Pythonで自由落下の物理シミュレーション 本記事では「地面に反発する猫」の物理シミュレーションを実践します。

Pythonで反発の物理シミュレーション

なお、本記事の内容は”Day2”の記事で学んだ内容がベースになるため、まだ”Day2”の記事を読んでいない人や内容を忘れてしまった人は先に読んで頂けると嬉しいです。

くるる
くるる
復習ばっちりです!
くるる

勉強熱心な”くるる”ちゃんが今日も可愛い(*・ω・)ノ♪

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

Day2の内容を簡単に復習した後、「地面に反発する猫」の物理シミュレーションについて説明していきます。

Pythonで反発の物理シミュレーション
はやぶさ
はやぶさ
復習の部分は”くるる”ちゃんにお任せしても良いかな?
くるる
くるる
任せてー!というか本記事は全部”くるる”が説明するよ!

最近、3歳になった”くるる”ちゃんがカッコイイ!

スポンサーリンク

Day2の復習

”Day2”の記事を読んでくれた人は【復習】を飛ばしてOKだよー

【復習】猫と地面の当たり判定

くるる
くるる
前回、”地面と猫の当たり判定”を勉強したの覚えてる?

Pythonで衝突の物理シミュレーション猫と地面の座標が↑の通りでした。

Pythonで衝突の物理シミュレーション

また、「猫が落下する」=「猫が地面に当たっていない」という状態でした。

”Day2”記事のポイントは…

くるる
くるる
「猫が地面に当たった」ときの条件式「当たったとき」の処理をどうするか?

でした。条件式については以下の通りだよー

【猫が着地】

猫の足が地面に接触あるいは地面に足が埋まる状態
かつ
猫が地面の内側にいる状態

これを数式に落とし込むと…

【猫が着地】

ground.pos1.y <= self.Cats[i].pos.y + CAT_H かつ
ground.pos1.x <= Cats[i].pos.x + CAT_W
かつ
Cats[i].pos.x <= ground.pos2.x

最後にソースコードで表現すると以下の通りです。

はやぶさ
はやぶさ
完璧な説明!

【復習】物理シミュレーション -地面に綺麗に着地-

くるる
くるる
次は「当たったとき」の処理を考えるよー

「猫が地面に綺麗に着地した」というのが、どんな現象(どんな状態)なのか?を考えるんだったよね?覚えてるかな?

Pythonで自由落下の物理シミュレーション

”Day2”記事では、以下のように考えたよね♪

猫が綺麗に着地する物理シミュレーション
  1. 猫が綺麗に着地する
  2. 地面に当たって静止状態になる
  3. 地面に当たったとき、猫の落下速度=0になる

つまり、「猫が地面に当たった」という条件(当たり判定)が”正”のとき「猫の落下速度=0」にすればOKでした。

それをソースコードで表現すると以下の通り!

はやぶさ
はやぶさ
完璧すぎて、私の出番がない…

学んだことを自分なりに消化吸収して、自分の言葉で説明できれば、知識が定着した証拠になります。もし機会があれば、学んだ内容を人に説明して、理解度を確認してみましょう。

以上までの内容が”Day2”記事の復習でした。

物理シミュレーション -反発-

くるる
くるる
本題に入るよー

”Day2”記事と同様に、「地面に反発する猫」というのが、どんな現象(どんな状態)なのか?を考えてみます。

Pythonで反発の物理シミュレーション

これも「猫が地面に当たっていない」=「自由落下」なので「猫が地面に当たった」ときの条件式は”Day2”と同じソースコードが使えます。

つまり、「地面に当たったとき」の処理だけ考えれば良いので…

『猫が地面に当たって”反発”する』という現象を考え、数式に落とし込んでみよー♪

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

反発とは

くるる
くるる
身近に似たような現象をがないか考えてみると…
くるる

「スーパーボールが地面に跳ね返る現象」が今回再現した現象に近い現象だと気が付いたよー

ある高さから落としたスーパーボールが10m/secで地面に当たり、8m/secの速度で跳ね返る…

それを繰り返すと、だんだん速度が減少していき、最後は地面の上で静止する。

この現象を物理シミュレーションで再現してみる。

反発係数

速度10m/secが8m/secになるということは…

e = 8 / 10

つまり、0.8倍の速度で跳ね返っていることになる!

はやぶさ
はやぶさ
”くるる”ちゃん符号を忘れているよ!
くるる
くるる
そうだった!!

y軸が下向きだから、上向きの跳ね返る速度はマイナスだ!

つまり、以下の式が正解だね(*・ω・)ノ♪

e = – (-8) / 10

はやぶさ
はやぶさ
正解!具体的な数値から、数式を導くアプローチもGoodです!
はやぶさ
はやぶさ
ただ、最終的には記号のみで表現したいねー
くるる
くるる
くるる
どーゆーこーと??
はやぶさ
はやぶさ
つまり、以下のように記号で表現すると良いよー

【反発係数】

e = – V2 / V1

なるほど!!今回は速度10m/sで地面に衝突してる例を使ったけど、速度が9m/sや8m/sも考えられるもんね。

記号を使えば、代入できる全ての数値を網羅した式として表現できるね!

はやぶさ
はやぶさ
お…おう(”くるる”ちゃん私より説明上手いのでは?)

”くるる”ちゃんは自力で【反発係数】の式を導きました!

具体的な数値から現象を再現する数式を求められるとGoodです!そして、最終的に数式を記号で表現できれば、アルゴリズムあるいは公式を算出できたことになります。

反発のソースコード

くるる
くるる
最後は数式をソースコードで表現してみるる

以上!今までの手順をメモしておくよー

ソフトウェアの作成手順には様々な方法がありますが、今回は以下のフローで作成しました。

  1. 再現したい現象を調査
  2. 再現したい現象を数式に落とし込む
  3. 数式を記号(一般系)で表現
  4. 数式をソースコードで実装

最終的に完成したソースコード -地面に反発-

最終的に完成した「猫が地面に反発する物理シミュレーション」のソースコードが以下です。

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

はやぶさ
はやぶさ
復習から本題のソースコード作成まで全て”くるる”ちゃんが説明してくれました!拍手!!
くるる
くるる
くるる
はやぶさ先生に褒められた!わーい♪

大変よくできました♪

おわりに

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

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

本記事をきっかけに「物理」や「プログラミング」に興味をもってくれた人が…

衝突時間や非線形性を考慮した物理シミュレーションを実践してみたい!
くるる
くるる
地面が柔らかい素材だった場合の物理シミュレーションに挑戦したい!

など、勉強のモチベーションが上がってくれたら、とても嬉しいです!

はやぶさ
はやぶさ
理系応援ブロガー”はやぶさ”@Cpp_Learningは頑張る理系を応援します!
スポンサーリンク

次回予告

『Pythonで物理シミュレーションしよう!』シリーズ記事ですが、何記事書くかなどを考えずに作成しています。

ただ、キリの良く”Day5”まで(約1週間で完結するチュートリアルとして)書き上げたいと考えています。

くるる
くるる
つまり…あと2記事か!
はやぶさ
はやぶさ
そういうことになるねー
くるる
くるる
じゃあ残りの2記事は、すごーく楽しい記事だよね?

くるるフクロウの大きな瞳で見つめられるとプレッシャーがスゴイ!笑

じゃあ、”くるる”ちゃんのリクエストに応えよう!

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

”Day4”では『地面をトランポリンにしたときの物理シミュレーション』を実践しよう!

くるる
くるる
くるる
はやぶさ先生!!!!大好き♪

私も勉強熱心な”くるる”ちゃんが大好きです。

次回もお楽しみに~

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

PICK UP BOOKS

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