単純な自由落下だけなら、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としたとき、
跳ね返るたびにほんのちょっとずつ上昇していく・・。
オイラー法だからかな?
気になってきたらルンゲクッタに変更します。
脳みそ分譲してくださいませんか?
だいぶ勘違いして解釈してるなぁとか。
ちなみに言語はDelphi6というアレなやつ一本ですが読むだけなら色々大丈夫なタイプです。
重力加速度が何か分かればあんな事やこんな事ができると思っていたのですが、衝突を考えると質量を保存しなきゃいけないんだなぁとか、今そんな所です。
気に掛けてくださってありがとうございます。
エネルギー保存、慣性モーメント、転がり摩擦、マグナス力等、正確な物理演算のためには色々と大変そうですよね。
お互い頑張りましょう。