往復運動リストに戻る    印刷する

往復する波動運動…異なるサイズの円列

大きさのことなる複数の円が列になって、サインカーブ上を往復運動します。 波の動きは、同一サイズの円列の波動運動と同じです。それぞれの円の直径を保存する配列を用意し、円を描くときにその値を使うところだけが異なります。
 float[] d =  new float[10]; // 円の直径
 .......
 ellipse(x, y, d[i], d[i]);

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト RSinCurveM3】
float[] d =  new float[10]; // 円の直径
float[] angle  = new float[10]; // 位置(角度)
float[] da =  new float[10]; // 角度の変化量
float x, y;
float h = 60; // 振幅
boolean[] on =  new boolean[10]; // 登場したかどうか

void setup() {
  size(150, 150);   //描画するための画面
  fill(0);
  angle[0] = -10; d[0] = 2;  //配列の初期化
  for(int i=1;i<angle.length;i++){  
    angle[i]= angle[i-1] - 20;
    d[i] = d[i-1] +2;
    da[i] = 5;
  }
}

void draw() { 
     background(255);   //モニタ画面の背景を白でクリア
     for(int i=0; i<angle.length; i++){
         angle[i] = angle[i] + da[i];
         x = map(angle[i], 0, 360, 0, width);
         y = height/2.0 - sin(radians(angle[i]))*h;
         ellipse(x, y, d[i], d[i]);

         if(angle[i] > 0 && !on[i]) on[i] = true;
         if(on[i] && angle[i]>360){//右の壁
           da[i] = -da[i];
         }else if(on[i] && angle[i]<0){//左の壁
           da[i] = -da[i];
         }
      }
}

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