重力加速度はだいたい9.8と聞きます。
ということは自由落下はy軸に平行にv=9.8*tの速度で下がりy-vとなり、
y+=-9.8*tということになります。
そこで、自由落下中の物体が床にあたり止まったとします。
そして床がなくなりまた自由落下を始めます。
すると加速度的に速くなるはずですが、上の式の通りだと時間が経過してるのでいきなり高速になってしまいます。そんなことはありません。どういうことでしょうか?
物理法則
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 物理法則
ゲームの3D空間上で9.8かどうかを決めるは遊びやすさと相談なんですけどね。
あと9.8/秒ですのでゲームに組み込むときはフレーム数に単位を変換するのをお忘れなく。
で、加速度を勘違いしていると思いますが、速度の増加分ですので停止すれば速度は一度0に戻ります。
経過時間で速度が増えるのなら、生まれてから一度も落下したことない人間が初めて落下した時の落下速度は恐ろしいものになりますよ。
1m落下でマッハを超えるとか。 計算してみたら一年で光速超えました!
あと9.8/秒ですのでゲームに組み込むときはフレーム数に単位を変換するのをお忘れなく。
で、加速度を勘違いしていると思いますが、速度の増加分ですので停止すれば速度は一度0に戻ります。
経過時間で速度が増えるのなら、生まれてから一度も落下したことない人間が初めて落下した時の落下速度は恐ろしいものになりますよ。
1m落下でマッハを超えるとか。 計算してみたら一年で光速超えました!
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 物理法則
空気中に突っ込んだり、空気中を抜けたりというように、環境が変わる場合には運動の式が変わりますね。
床に衝突するというのも環境が変わっていますね。(そして式も変わりますね)
式が変わった瞬間に時刻tを0にすればいいのです。
さて、空気抵抗は正確に計算するのは結構難しいと思いますが、確か kv^2 で近似できたと思います。
kは定数、vは物体の落下速度です。
kv^2 は上方向に働く力なので、重力と差分をとって mg - kv^2 が物体に下向きにかかる力ですね。
これが負ならば物体は減速しながら落下し、正ならば加速しながら落下します。
運動方程式は ma(t) = F(t) ですから、時刻 t での加速度は
a(t) = (mg - kv(t)^2) / m
ですね。もちろん時刻 t=0 の点は「物体が空気中に入った瞬間」です。
この式を積分してあげれば時刻 t での速度、位置が分かります。
床に衝突するというのも環境が変わっていますね。(そして式も変わりますね)
式が変わった瞬間に時刻tを0にすればいいのです。
さて、空気抵抗は正確に計算するのは結構難しいと思いますが、確か kv^2 で近似できたと思います。
kは定数、vは物体の落下速度です。
kv^2 は上方向に働く力なので、重力と差分をとって mg - kv^2 が物体に下向きにかかる力ですね。
これが負ならば物体は減速しながら落下し、正ならば加速しながら落下します。
運動方程式は ma(t) = F(t) ですから、時刻 t での加速度は
a(t) = (mg - kv(t)^2) / m
ですね。もちろん時刻 t=0 の点は「物体が空気中に入った瞬間」です。
この式を積分してあげれば時刻 t での速度、位置が分かります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 物理法則
積分の話が出ていますが物理現象としての落下を考えるなら、形状による空気抵抗、風の影響、上昇気流、重力加速度を考えないわけには行きません。
これらは重力加速度を除き刻々とパラメータを変化するものですから、落下方向のベクトルも刻々と変化するものとなります。
つまり、一瞬一瞬のベクトルを計算してそれを積算したものが落下速度であり落下ベクトルになると言うことですね。
それと前に回答の最終結果の報告をお願いします。
「画面がちらつく • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=11171
ちなみに錐揉み落下している飛行機になると揚力と回転モーメントも計算パラメータに加えないと行けませんし、揚力の計算は流体力学の計算も必要とします。まぁ完全には無理なのでゲームでは色々と端折るわけですが。
これらは重力加速度を除き刻々とパラメータを変化するものですから、落下方向のベクトルも刻々と変化するものとなります。
つまり、一瞬一瞬のベクトルを計算してそれを積算したものが落下速度であり落下ベクトルになると言うことですね。
それと前に回答の最終結果の報告をお願いします。
「画面がちらつく • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=11171
ちなみに錐揉み落下している飛行機になると揚力と回転モーメントも計算パラメータに加えないと行けませんし、揚力の計算は流体力学の計算も必要とします。まぁ完全には無理なのでゲームでは色々と端折るわけですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 物理法則
元の方に書いておかないと意味が無いので転記しておきます。ヒューガ さんが書きました:なんかいろいろ勘違いして「力」であることを忘れていました。自己解決しました。
画面のちらつきについては全てのモデルやベクトルを小さくすることによってSetCamerNearFarを使わずに済み解決しました。
お騒がせしました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。