垂直落下……落下し、跳ねる
一つの円が、垂直に落下し、床でバウンドし、だんだんと減衰します。 減衰する運動【リスト6-3】と同じです。落下する円の座標を計算する関数ballFall()を定義し、それをdraw()関数から呼出しています。
クリックで停止⇔再開
【リスト FallVertical】
float g =1.8; //加速度
float friction=0.95; //減衰
float y; //y座標
float dy; //y方向の速度
float r = 5; // 円の半径
void setup() {
size(150, 150); //描画するための画面
fill(0);
}
void draw() {
background(255); //画面背景を白でクリア
ballFall(); //y座標を計算する関数
ellipse(width/2, y, r*2,r*2);
}
void ballFall(){
dy = dy + g;
y= y+dy; //y座標を動かす
if (y>height-r){//下の壁
y = height-r; //壁の上に置く
dy = -dy * friction; //速度が減衰
if(abs(dy)<=g/2) { //ほぼ止まったどうかを判定
dy=0; y=0; //止まったら、再度落下
}
}
}