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

往復する波動運動…ひとつ(軌跡なし)

ひとつの円が、サインカーブ上を往復運動します。 動きは、一方向の波動運動と同じです。
画面の横幅と1サイクルの波(角度が0-360度)が一致するので、角度が360度になったかで右の壁に来たことを、また角度が0より小さくなったことで左の壁に来たことを判定します。
 if(angle > 360){//1サイクルの波を終えた(右の壁)
    da = -da;  //角度変化の向きを変える
 }else if(angle < 0){//波の最初に戻った(左の壁)
    da = -da;
 }
下のリストでは、論理演算子|| (OR, または)を使って、ひとつのif文で記述しています。

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト RSinCurve1】
float angle; // 位置(角度)
float x, y;  // 位置(xy座標)
float d = 10; // 円の直径
float h =60;  // 振幅
float da = 5; // 角度の変化量

void setup() {
  size(150, 150);  //描画するための画面
  fill(0);
}

void draw() { 
     background(255);   //モニタ画面の背景を白でクリア
     angle = angle + da; //角度を増加、波上の位置を進める
     x = map(angle, 0, 360, 0, width);  //0-360度を画面の横位置に換算
     y = height/2.0 - sin(radians(angle))*h;
     ellipse(x, y, d, d);
     if(angle < 0 || angle > 360){//右の壁または左の壁
         da = -da;
     }
}

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