ボールを遠くに投げるとき、少し上に向かって投げますよね。
そのような軌道をプログラムで表してみます。
実行結果はこちら。
ボールには下向きに重力がかかるので、それを模擬する計算をy軸方向のスピードに対して行います。
注意点としては、y軸座標は上が0です。このため、上に投げる場合、y軸の初速をマイナス値とします。また、重力加速度は逆にプラスの値とします。
せっかくなのでバウンドの処理も書いてみます。draw関数の一番下に処理を追加しました。
float g = 0.15; // 重力加速度
float x; // x座標
float y; // y座標
float spd_x; // x方向のスピード
float spd_y; // y方向のスピード
// セットアップ
void setup()
{
// 画面のサイズ
size( 640, 480 );
// 開始座標
x = 0;
y = height;
// 初速
spd_x = 3;
spd_y = -10;
}
// 描画
void draw()
{
// 背景を黒で塗る
background( 0, 0, 0 );
// 加速度の演算
spd_y += g;
// スピードの演算
x += spd_x;
y += spd_y;
// ボールを描く
fill( 100, 255, 100, 255 );
ellipse(x, y, 20, 20);
// バウンドの判定
if( y > height ){ // ボールが画面下に当たったら
spd_y = -spd_y; // y軸のスピードを反転
}
}
実行結果はこちら。
サンプルソフトを改造して遊んでみてくださいね。