振動運動リストに戻る    印刷する

ばねで繋がる(列)

複数の円が見えないスプリングで繋がれているように動きます。 2つの円がばねで繋がるで拡張したクラスSpringを使っています。
配列にSpringクラスのオブジェクトを生成して格納します。
for(int i=0;i<n;i++){
   obj[i]= new Spring(width/2, height/4+distance*i, mass, gravity, d,
                                              st, da, color(0,0,0));
}
列の先頭の位置を決め、その下の円は一つ前の円の位置を目指してついて動かします。
obj[0].recalc(mX, mY);  //列の先頭の位置
obj[0].drawObj();
for(int i=1;i<n;i++){
   obj[i].recalc(obj[i-1].x, obj[i-1].y); //列の下の円は上の位置について動く
   obj[i].drawObj();
}
このままだと、目指す位置に到達すると動かなくなるので、先頭の円の位置を左右に変化させます。
mX = mX +mv;  //列の先頭の位置を左右に振る
if(mX>width/2+50) mv=-mv;  //動く方向を逆転
else if(mX<width/2-50)mv=-mv;

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト Hanging2】
float gravity = 3.5;
float mass = 5.0;
float st = 0.2;
float da = 0.7;
float d =15;  //円の直径
float mX, mY;  //揺らす円の座標
float mv=3; 
int distance=5;

void setup() {
  size(150, 150);   //描画するための画面
  for(int i=0;i<n;i++){
     obj[i]= new Spring(width/2, height/4+distance*i, mass, gravity, d,
                                               st, da, color(0,0,0));
  }
  mX=width/2;  //列の先頭の円の位置
  mY=height/4;
}

void draw() { 
  background(255);   //画面の背景を白でクリア
  obj[0].recalc(mX, mY);  //列の先頭の位置
  obj[0].drawObj();
  for(int i=1;i<n;i++){
    obj[i].recalc(obj[i-1].x, obj[i-1].y); //列の下の円は上の位置について動く
    obj[i].drawObj();
  }
  mX = mX +mv;  //列の先頭の位置を左右に振る
  if(mX>width/2+50) mv=-mv;
  else if(mX<width/2-50)mv=-mv;
}

arigat アットマーク acm.org / copyright © info