単純な自由落下だけなら、y = y0 + v0*t + g*t*t/2
で位置を求めればいいと思いますが
跳ね返りだとかボール同士の衝突を考えたとき、
運動方程式という微分方程式を解くオイラー法でやるのが
1番しっくりきました。
まず、
my'' + mg
y'' = g
また、
y' = v
v' = g
とすれば、
y_(n+1) = y_n + v_n * H
v_(n+1) = v_n + g * H
と。Hは刻み幅で、小さければ小さいほど精度が上がりますが
0.05くらいを入れておけば十分に思います。
その後は次のように値の更新
y_n = y_(n+1)
v_n = v_(n+1)
地面に接触したときの跳ね返りに関しては、
跳ね返り係数をEとすると
y_(n+1) = 0
v_(n+1) = (- v_n + g * t) * E
とすればOK。
これでそれっぽくできました。
ただ、跳ね返り係数を1としたとき、
跳ね返るたびにほんのちょっとずつ上昇していく・・。
オイラー法だからかな?
気になってきたらルンゲクッタに変更します。
で位置を求めればいいと思いますが
跳ね返りだとかボール同士の衝突を考えたとき、
運動方程式という微分方程式を解くオイラー法でやるのが
1番しっくりきました。
まず、
my'' + mg
y'' = g
また、
y' = v
v' = g
とすれば、
y_(n+1) = y_n + v_n * H
v_(n+1) = v_n + g * H
と。Hは刻み幅で、小さければ小さいほど精度が上がりますが
0.05くらいを入れておけば十分に思います。
その後は次のように値の更新
y_n = y_(n+1)
v_n = v_(n+1)
地面に接触したときの跳ね返りに関しては、
跳ね返り係数をEとすると
y_(n+1) = 0
v_(n+1) = (- v_n + g * t) * E
とすればOK。
これでそれっぽくできました。
ただ、跳ね返り係数を1としたとき、
跳ね返るたびにほんのちょっとずつ上昇していく・・。
オイラー法だからかな?
気になってきたらルンゲクッタに変更します。