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

ばねで繋がる(ふたつ)

ふたつの円が見えないスプリングで繋がれているように動きます。 スプリングで定義したクラスSpringを拡張して使います。
クラスSpringにコンストラクタを追加し、ばねの強さ、減衰係数、色を指定してオブジェクトを生成できるようにします。
Springクラスのコンストラクタ
 Spring(float xpos, float ypos, float m, float g, float dd,
                                    float stiff, float damp, color cc)
    xpos: スプリングの先のx座標
    ypos: スプリングの先のy座標
    m   : 質量
    g   : 重力加速度
    dd  : 直径
    stiff:ばねの強さ
    damp :減衰係数
    cc   :色
この新しいコンストラクタを使って、2つのSpringオブジェクトを生成します。位置はすぐ変わるの最初の位置は重要ではありませんが、画面上部に置き、赤い円を直径分下にしました。
Spring obj1; 
Spring obj2; 
obj1 = new Spring(oriX, oriY, mass, gravity, d, st, da, color(0,0,0));
obj2 = new Spring(oriX, oriY+d, mass, gravity, d, st, da, color(200,0,0));
draw()関数の中で、黒円は(mX, mY)に向かって、赤円は黒円の位置を目指してばねで動かします。
  obj1.recalc(mX, mY); //黒円は(mX, mY)へ動く
  obj1.drawObj();
  obj2.recalc(obj1.x, obj1.y);//赤円は黒円を目指して動く
  obj2.drawObj();
赤円が黒円に近付いたら(距離が20以下になったら)、黒円が目指す位置(mX, mY)のx座標mXを左右に動かします。
  if(sqrt((obj1.x-mX)*(obj1.x-mX) + (obj1.y-mY)*(obj1.y-mY)) < 20) { 
    mX = random(0, width); //黒円の位置はランダムに動かす
    mY = random(0, height);
  }

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト Hanging1】
Spring obj1; 
Spring obj2; 

float gravity = 3.5;
float mass = 7.0;
float st = 0.2;
float da = 0.7;
float d =20;  //円の直径
float mX, mY;  //黒円を動かす位置
float oriX, oriY;
int dist=5;

void setup() {
  size(150, 150);   //描画するための画面
  oriX = width/2;
  oriY = height;
  obj1 = new Spring(oriX, oriY, mass, gravity, d, st, da, color(0,0,0));
  obj2 = new Spring(oriX, oriY+d, mass, gravity, d, st, da, color(200,0,0));
  mX=width/2.0;
  mY=height/4.0;
}

void draw() { 
  background(255);   //画面の背景を白でクリア
  obj1.recalc(mX, mY); //黒円は(mX, mY)へ動く
  obj1.drawObj();
  obj2.recalc(obj1.x, obj1.y);//赤円は黒円を目指して動く
  obj2.drawObj();
    
  if(sqrt((obj1.x-mX)*(obj1.x-mX) + (obj1.y-mY)*(obj1.y-mY)) < 20) { 
    mX = random(0, width); //黒円の位置はランダムに動かす
    mY = random(0, height);
  }
}
【リスト Springクラスの追加したコンストラクタ】
Spring(float xpos, float ypos, float m, float g, float dd,
                                        float stiff, float damp, color cc) {
  x = xpos;
  y = ypos;
  mass = m;
  gravity = g;
  d = dd;
  stiffness = stiff;
  damping = damp;
  c = cc;
}

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