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();
};
}
この記事が気に入ったらサポートをしてみませんか?