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