Unity勇者の冒険の書

Unityで学んだことや便利なものなど作ったら紹介します

【Unity勇者の奮闘記】Unityで物理の勉強4(初速を加えた時、地面に落ちるまでの時間を計算する)

こんにちは。

今回は球に初速を加えた後、地面に落ちるまでの時間を計算で出していきたいと思います。

f:id:LightGive:20171028163330p:plain


まずは鉛直投げ上げの公式を使っていきたいと思います。


鉛直投げ上げの公式

  • 速度  v = v0 - gt
  • 変位  y = v0t -{\frac{1}{2}}gt^2
  • tを含まない式  v^2 - v0^2 = -2gy

今回知りたいのは時間なので、y座標からtが求められる式、二番目の変位の式を使います。式が分かりやすくなるように、それぞれ割り当てられている変数は何を表しているのか、書いてみます。式では投げる高さが0スタートになっているので、その高さ分を足します。

  • t(地面を通過する時間)
  • g(重力加速度)
  • v0(初速)
  • sp(投げ上げ始める高さ)
  • gp(地面の高さ)

これで変位の式を作ってみます。

 gp = v0t -{\frac{1}{2}}gt^2 + sp

この式のままだと、因数分解で解けないので片方の辺を0にしていきます。

 0 = -{\frac{1}{2}}gt^2 + v0t + sp - gp
 0 = {\frac{1}{2}}gt^2 - v0t - sp + gp

これで因数分解できる形の式になりましたが、普通の解き方はプログラムで書くのが難しいので、解の公式で解いていきます。

【解の公式はこれ】
 x = {\frac{-b±{\sqrt{b^2 - 4ac}}}{2a}}

それぞれa,b,cの値はこんな感じです。

  •  a = {\frac{1}{2}}gt^2
  •  b = {-v0}
  •  c = -sp + gp


この解の公式に当てはめていきます。
-sp + gpはまとめられるので、cとします。


 t = {\frac{-(-v0) ±{\sqrt{(-v0)^2 -4・{\frac{1}{2}}g・c}} }{2・{\frac{1}{2}}g}}

 t = {\frac{v0±{\sqrt{(-v0)^2-2gc}}}{g}}

±となっている所は、秒数が負の数なのはおかしいので、正の数になっている方を取ります。
これで式を簡略化できたので、これをC#に直して解くとこんな感じになると思います。

では作ったので、実験していきたいと思います。
今回も同じように、Debug.Break()で一定時間後に止めるようにしました。
f:id:LightGive:20171028163704g:plain

良い感じに地面の位置で止まってくれました。逆に、地面の位置を上にして、地面より下から投げ上げた時も実験してみます。
f:id:LightGive:20171028165040g:plain

t1,t2の値は下の様になってました。
t1…約2.0秒後
t2…約0.5秒後
このt2の値は何か調べていたら、地面の高さを下から上に通過した時の時間でした。下の図だと分かりやすいと思います。
f:id:LightGive:20171028171927p:plain


と、いう事で、今回は地面に落ちるまでの時間を計算してみました。意外と面倒でしたが敵のAI等を作る際に役立つと思います。

では(^^)/