ジャンプの式について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
atrix

ジャンプの式について

#1

投稿記事 by atrix » 12年前

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ケタになってしまうことがあり、これはどう考えても画面内に収まらないとおもうのです。

いろいろ疑問に思ってしまうところがあり、たくさんの質問をしてしまいましたが、どうかよろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ジャンプの式について

#2

投稿記事 by みけCAT » 12年前

atrix さんが書きました:実際に計算してみたのですが、結果が4ケタになってしまうことがあり、これはどう考えても画面内に収まらないとおもうのです。
とりあえずgnuplotでプロットしてみましたが、結果が-1e+3以下になることはあっても、1e+3以上になることはありませんでした。
変数はg=9.8、y_max=100に設定しました。
jump_test_2013-11-13_22-25-3.png
とりあえずプロットしてみた
jump_test_2013-11-13_22-25-3.png (18.36 KiB) 閲覧数: 3193 回
値が1e+3以上になると主張しているのでしたら、どういう計算をしましたか?
値が-1e+3以下になると主張しているのでしたら、実際のジャンプ処理では計算でy<0になったらy=0とみなすようにすればいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ジャンプの式について

#3

投稿記事 by みけCAT » 12年前

atrix さんが書きました:初速度が大きくなるのに時間がかかるということになると思うのですが・・・合っていますか?
初速度はジャンプの開始時に与えられる定数のはずなので、「大きくなるのに時間がかかる」はナンセンスだと思います。
「初速度」という言葉を「初期値として与えられる、t=0のときの速度」以外の意味で使用しているのでしたら、その意味を教えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ジャンプの式について

#4

投稿記事 by みけCAT » 12年前

atrix さんが書きました:最高点として仮定したy_maxの値が大きいほど初速度や、yの最高点までにかかる時間は大きくなり
「初速度」を「初速度の大きさ」と読み替えれば、これは正しいです。
参考としてgnuplotでプロットした図を載せます。(g=9.8で、sqrt ( 2.000 * g * y_max) * t - 0.500 * g * t * tをプロットしたもの)
jump_test2_2013-11-13_22-37-22.png
y_maxによるジャンプの違い
jump_test2_2013-11-13_22-37-22.png (22.64 KiB) 閲覧数: 3182 回
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が成り立つとき画面内に収まります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ジャンプの式について

#5

投稿記事 by みけCAT » 12年前

(sqrt ( 2.000 * g * y_max) * t - 0.500 * g * t * t ) * 480.000 / y_maxの最大値が480であることの証明(に近いもの)を書きました。
ただし、g*y_max>0を仮定しています。
jump_syoumei.gif
最大値が480であることの証明(に近いもの)
jump_syoumei.gif (8.73 KiB) 閲覧数: 3162 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

atrix

Re: ジャンプの式について

#6

投稿記事 by atrix » 12年前

みなさま、丁寧お答えいただき本当に感謝しております。

おかげさまで、疑問を解決することができました。

重ねて感謝申し上げます。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ジャンプの式について

#7

投稿記事 by みけCAT » 12年前

解決でしたら、解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る