8.1 重力のシミュレーション その1
-
M先生
-
クレーンゲームを完成させるとなると,今度は人形を作りたくなるよね.
-
Aさん
-
ですね.早速人形を描いてみました.
-
M先生
-
まず,人形が下に落ちて,床に当たったら止まるというプログラムを書いてみようか.どうすればいい?
-
Aさん
-
えっと,まず,Y座標を引く.それで人形の色と床の色が触れたときに引くのを止める.触れてないときにY座標を引く.
-
M先生
-
擬似言語で書くと?
-
Aさん
-
このようになります.
-
テスト
-
人形が床に触れている?
-
はい
-
(なにもしない)
-
いいえ
-
Y座標を引く
-
M先生
-
じゃあ実装してみて?
-
Aさん
-
できました.
-
M先生
-
なるほど.とりあえずこれでいいね.でも,問題なのは,これが本当に落ちているように見えないこと.なんでかな?
-
Aさん
-
重力
の
加速度
が考慮されていないのですね.本来ならば,ちょっとずつ速くなっていくはず.
-
M先生
-
では,今回は重力をうまくシミュレーションするにはどうすればいいかということを考えていこう.
-
M先生
-
では,まず始めに「速度」という変数を作ってくれる?
-
Aさん
-
分かりました.
-
M先生
-
速度はどのように変化していく?
-
Aさん
-
加速度が足されていきます.
-
M先生
-
そうだね.では,とりあえず加速度を「1」としよう.
-
Aさん
-
そうすると,次のようなプログラムが書けます.
-
M先生
-
うん.これで,速度が足されているね.でも一つ忘れていることがあるよ.
-
Aさん
-
あ,速度分だけ落ちるようにしないと意味がないですよね?
-
M先生
-
その通り.じゃあ実験してみよう.
-
Aさん
-
加速しているけど,何かゆっくりですね.
-
M先生
-
そうだね.スクリプトの実行回数や,加速度を調整してみよう.
-
Aさん
-
あ,下に消えてしまいました.
-
M先生
-
加速度が大きすぎると,床を突き抜けてしまうね.その場合は,ビューアーで画面範囲の値を指定して元に戻しておこう.床を突き抜けないようにするには,色判定ではなく,座標指定の条件文に変えると良い.
-
Aさん
-
こうですか.
-
M先生
-
そう.あと,今はとりあえずマウスで動かして実験しているから,「マウスの下にあるか」タイルを使って,マウスの下にある場合に速度を0に戻しておくプログラムを書いておくとよいね.
-
Aさん
-
できました.
-
M先生
-
よろしい.
練習問題8.1
このままでは,たいていの場合,床を突き抜けてとまってしまう.床を突き抜きぬけても,人形が床の上に止まるようにプログラムを修正しよう.
練習問題8.2
地球の重力加速度は9.8m/sである.実際の重力を忠実にシミュレートするプログラムを作ってみよう.
ヒント:加速度を9.8にしてもうまくいかない.単位に気をつけよ.(Squeakでの長さの単位はドットである.時間の単位は,刻み値の設定によって変わる.)
練習問題8.3
ジャンプする人のシミュレーションプログラムを作ってみよう.