ばねで繋がる(列)
複数の円が見えないスプリングで繋がれているように動きます。 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;
クリックで停止⇔再開
【リスト 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;
}