Last updated: 2016 -2014. Kajiyama                    [ 目次に戻る ]

放物運動





//放物運動のプログラム
//ボールの速度と減速率と位置の変化(1フレーム = 1/60秒)

int a=10;//円の半径
PVector position;//ボールの位置変数のベクトル宣言
PVector velocitiy;//ボールの速度変数のベクトル宣言
PVector gravity;//ボールの重力加速度変数のベクトル宣言
//減速率のベクトル宣言 変数 deceleration.x と deceleration.y を定義
PVector deceleration;

void setup() {
  //初期設定
  size(400,300);background(255);
  deceleration = new PVector(0.995, 0.995);//減速率の定義(x,y)
  position = new PVector(a, height/2);//最初の位置(x,y)
  velocitiy = new PVector(300.0/60, -300.0/60);//初速度(x,y)の定義,
  gravity = new PVector(0.0/60, 9.8/60);//重力加速度(x,y)の定義
}

void draw() {
  // 重力加速度による新しい速度1(x,y)の計算
  velocitiy.add(gravity);//現在の速度=以前の速度+重力加速度
  // 減速率による新しい速度2(x,y)=以前の速度*減速率の計算 
  velocitiy.x = velocitiy.x * deceleration.x;//掛け算
  velocitiy.y = velocitiy.y * deceleration.y;//掛け算
  // 速度による新しい位置(x,y)の計算
  position.add(velocitiy);//新しい位置(x,y)=以前の位置+速度

  //図形の軌跡をグラデーションで残す
  fill(255,20);noStroke();rect(0,0,width,height);//塗りつぶし
  stroke(255,0,0); fill(255,0,0);//線色を赤・面色を赤
  ellipse(position.x, position.y,2*a,2*a);//新しい位置にボールを描く

  // ボールが下端の床にぶつかると方向反転
  if( (position.y+a > height) || (position.y-a < 0) ){
   velocitiy.y = -1*velocitiy.y;
  }
  // ボールが左右両端の壁にぶつかると方向反転
  if( (position.x+a > width) || (position.x-a < 0) ){
   velocitiy.x = -1*velocitiy.x;
  }

//save("vector_ellipse03a-3.jpg");// 実行結果を画像形式で保存
//saveFrame("vector_ellipse03a-###.tif");// 連続画像で保存
}

[ 目次に戻る ]