ページ 1 / 1
ジャンプの式について
Posted: 2013年11月13日(水) 22:17
by atrix
C言語~旧プログラミングの館~ の27で、ジャンプを考えるとき、物理の公式を利用して
y = (int)((sqrt ( 2.000 * g * y_max) * t - 0.500 * g * t * t ) * 480.000 / y_max);
となっているのですが、私は学校で物理を勉強しているのですが、この式が意味するところがいまいちわかりません。
右辺の sqrt(2.000*g*y_max)は、y_maxを最高点として仮定したときの初速度だということは分かりました。
その初速度は最高点として仮定したy_maxの値が大きいほど初速度や、yの最高点までにかかる時間は大きくなり、ゆっくり減速していくということなのでしょうか?もしそうだとしたら、初速度が大きくなるのに時間がかかるということになると思うのですが・・・合っていますか?
また、*480.000/y_max という部分について、どうしてこれをすると画面内に収まるのでしょうか?
実際に計算してみたのですが、結果が4ケタになってしまうことがあり、これはどう考えても画面内に収まらないとおもうのです。
いろいろ疑問に思ってしまうところがあり、たくさんの質問をしてしまいましたが、どうかよろしくお願いします。
Re: ジャンプの式について
Posted: 2013年11月13日(水) 22:28
by みけCAT
atrix さんが書きました:実際に計算してみたのですが、結果が4ケタになってしまうことがあり、これはどう考えても画面内に収まらないとおもうのです。
とりあえずgnuplotでプロットしてみましたが、結果が-1e+3以下になることはあっても、1e+3以上になることはありませんでした。
変数はg=9.8、y_max=100に設定しました。

- とりあえずプロットしてみた
- jump_test_2013-11-13_22-25-3.png (18.36 KiB) 閲覧数: 3205 回
値が1e+3以上になると主張しているのでしたら、どういう計算をしましたか?
値が-1e+3以下になると主張しているのでしたら、実際のジャンプ処理では計算でy<0になったらy=0とみなすようにすればいいと思います。
Re: ジャンプの式について
Posted: 2013年11月13日(水) 22:30
by みけCAT
atrix さんが書きました:初速度が大きくなるのに時間がかかるということになると思うのですが・・・合っていますか?
初速度はジャンプの開始時に与えられる定数のはずなので、「大きくなるのに時間がかかる」はナンセンスだと思います。
「初速度」という言葉を「初期値として与えられる、t=0のときの速度」以外の意味で使用しているのでしたら、その意味を教えてください。
Re: ジャンプの式について
Posted: 2013年11月13日(水) 22:44
by みけCAT
atrix さんが書きました:最高点として仮定したy_maxの値が大きいほど初速度や、yの最高点までにかかる時間は大きくなり
「初速度」を「初速度の大きさ」と読み替えれば、これは正しいです。
参考としてgnuplotでプロットした図を載せます。(g=9.8で、sqrt ( 2.000 * g * y_max) * t - 0.500 * g * t * tをプロットしたもの)

- y_maxによるジャンプの違い
- jump_test2_2013-11-13_22-37-22.png (22.64 KiB) 閲覧数: 3194 回
atrix さんが書きました:ゆっくり減速していくということなのでしょうか?
gがy_maxの関数でないならば、誤りです。
普通に高校で習うような物理の例題では、重力加速度gは定数なので、減速の速さ(=加速度の大きさ?)はy_maxに依存せず一定です。
atrix さんが書きました:また、*480.000/y_max という部分について、どうしてこれをすると画面内に収まるのでしょうか?
f(t)=sqrt ( 2.000 * g * y_max) * t - 0.500 * g * t * t とおきます。
f(t)*480.0/y_max は、f(t)の値をy_maxで割って480.0を掛けることと同じ(積の交換法則)なので、
この場合y_maxはf(t)の最大値なので、y_maxで割ると最大値が1になり、480.0を掛けると最大値が480になります。
従って、画面にy∈[0,480]の範囲が表示されると仮定すれば、f(t)>=0が成り立つとき画面内に収まります。
Re: ジャンプの式について
Posted: 2013年11月13日(水) 23:22
by みけCAT
(sqrt ( 2.000 * g * y_max) * t - 0.500 * g * t * t ) * 480.000 / y_maxの最大値が480であることの証明(に近いもの)を書きました。
ただし、g*y_max>0を仮定しています。

- 最大値が480であることの証明(に近いもの)
- jump_syoumei.gif (8.73 KiB) 閲覧数: 3174 回
Re: ジャンプの式について
Posted: 2013年11月14日(木) 20:34
by atrix
みなさま、丁寧お答えいただき本当に感謝しております。
おかげさまで、疑問を解決することができました。
重ねて感謝申し上げます。
Re: ジャンプの式について
Posted: 2013年11月14日(木) 22:40
by みけCAT
解決でしたら、解決チェックをお願いします。