見出し画像

atan2

ここ最近、ずっとProcessingを勉強しています。

レベルアップのスピードが亀の歩みなのが自分でも驚きます。
本の事例を1つ理解するのに、2週間くらいかかります。

そんな状況なのに、飽きずに楽しめていることも、また驚きであります。

数学の壁

Processingを理解するのに、いくつもの壁があります。
その中でも大きくそびえ立っている壁が「数学」です。

Processingのコードを書くのは本やネットの記事を読めばわかるのですが、数学だけは読んでも読んでも理解できない。Processingの本が数学のことを掘り下げて書くことは、もちろんありません。

だからProcessingとは別に数学を勉強しなければいけません。
私は「数Ⅰ」の本を買いました(笑)。

三角関数

今苦労しているのが、三角関数です。
三角関数はなんとなくわかってきたのですが、Processingで使うまでは理解できていません。。

最近、atan2というものを知ったので、ここにメモしておきます。
noteにメモを残しておくと、あとあと便利なのですよね。読まされるようは迷惑だとは思いますが。

コード的にはめちゃめちゃですが、修正する気力が残っていません。。

int NUM=100;
float[] x=new float[NUM];
float[] y=new float[NUM];
float[] r=new float[NUM];
float newX, newY, newR;
float angle;
int current=0;

void setup() {
 size(640, 335);
 frameRate(5);
 colorMode(HSB, 360, 100, 100, 100);
 background(50, 50, 100, 100);
 stroke(200, 100, 100, 100);
 strokeWeight(0.6);

 x[0]=0;
 y[0]=0;
 r[0]=10;

 newX=450;
 newY=200;
 newR=30;
}

void draw() {
 noFill();
 newX=random(400, width);
 newY=random(250, height);
 newR=random(3, 12);

 // angle
 angle=atan2(newY-y[current], newX-x[current]);

 ellipse(x[current], y[current], r[current]*2, r[current]*2);

 // current
 x[current+1]=x[current]+cos(angle)*(r[current]+newR);
 y[current+1]=y[current]+sin(angle)*(r[current]+newR);
 r[current+1]=newR;
 current++;

 if (current>70) {
   noLoop();
 };
}

画像1


この記事が気に入ったらサポートをしてみませんか?