Healing Kosaba’s Diary

電子・情報・マイコン・通信の備忘録

極座標ベクトル表示と三角関数波形の学習用のデモプログラム

極座標三角関数波形の学習用のデモプログラム
processingで作成しました
視覚的効果はかなりあったように感じています。
ご自由にお使いください。
f:id:healingkosaba:20200709225336p:plain

f:id:healingkosaba:20200709234406p:plain
振幅を変化させてシミュレートできます
/*
 * vector 
 */

// 
float radian = 0.0;
float kakudo = 0.0;
float isou;
float a, b, c;
  
void setup() {
  size(1220, 400);
  background(255,255,255);
  //isou = atan(150.0/100.0);
}

void draw() {
  // 振幅設定 
  a = 100;
  b = -150;
  c = sqrt(a*a + b*b);
  
  kakudo=kakudo+0.5;
  radian=kakudo*3.14159/180;
  isou = atan(b/a);
  
  // 座標軸
  stroke(0,0,0);
  strokeWeight( 1 );
  fill(255, 255, 255);
  circle(200, 200, c*2);
  circle(200, 200, b*2);
  circle(200, 200, a*2);
  line(200, 0, 200, 400);      // y軸
  line(500, 0, 500, 400);      // 時間軸
  line(0, 200, 1220, 200);     // x軸
  // 
  line(200, 200-a, 1220, 200-a);
  line(200, 200+a, 1220, 200+a);
  //
  line(200, 200-b, 1220, 200-b);
  line(200, 200+b, 1220, 200+b);
  // 
  line(200, 200-c, 1220, 200-c);
  line(200, 200+c, 1220, 200+c);  
  // vector
  stroke(255, 0, 0);
  strokeWeight( 3 );
  line(200, 200,200+cos(radian)*a, 200-sin(radian)*a);
  
  stroke(0, 0, 255);
  strokeWeight( 3 );
  line(200, 200,200-sin(radian)*b, 200-cos(radian)*b);
  
  stroke(0, 255, 0);
  strokeWeight( 3 );
  line(200, 200,200+cos(radian+isou)*c, 200-sin(radian+isou)*c);
  delay(10);

  noStroke();
  
  // red sin()
  fill(255, 0, 0);
  ellipse(500+kakudo, 200-sin(radian)*a, 3, 3);
  // blue cos()
  fill(0, 0, 255);
  ellipse(500+kakudo, 200-cos(radian)*b, 3, 3);
  // green sin()
  fill(0, 255, 0);
  ellipse(500+kakudo, 200-sin(radian+isou)*c, 3, 3);

//
  if(kakudo == 720){
    kakudo = 0.0;
    delay(5000);
    background(255, 255, 255);
  }
}