Swelling Sin Curve
int n_Ellipse = 100000; //描くパーティクルの数
int n_Line = 4; //サインカーブの本数
int n_Rot = 100; // サインカーブの周期数
void setup() {
size(800, 800);
noStroke();
background(0);
for (int j = 0; j < n_Line; j++) {
for (int i = 0; i < n_Ellipse; i++) {
//x座標を計算(横並びにnEllipse個分)
float x = map(i, 0, n_Ellipse, 0+50, width-50);
//sinカーブの振幅をそれぞれのカーブによって変える
float rad = map(j, 0, n_Line, height/10, height/2);
//y座標をサインカーブとして計算
float y = height/2 + sin(map(i, 0, n_Ellipse, 0, TWO_PI * n_Rot)) * rad;
//x, y座標にノイズを加える //サインカーブの中間で一番ノイズが激しくなるように調整
x += tan(TWO_PI * noise(x)) * sin(map(i, 0, n_Ellipse, 0, PI)) * 4;
//y += tan(TWO_PI * noise(y, y)) * cos(map(i, 0, n_Ellipse, 0, PI)) * 10;
//サインカーブの最初から最後にかけてパーティクルの大きさを変える(0→1.5→0)
float esize = sin(map(i, 0, n_Ellipse, 0, PI)) * 1.5;
fill(255, 100);
ellipse(x, y, esize, esize);
}
}
}
サインカーブを多数のパーティクルで描いて、それにノイズを加えているだけです。
ノイズに使う三角関数を変えてみたり、サインカーブの本数・周期を適当に変えるだけでも見た目が結構変わります。
まだまだいじくりがいはあるかと思います。
下記、派生版を貼っておきます。
▼周期数を減らす・色を付ける・y軸にもノイズを加える・noise()のパラメータをx, yの二つに...etc
int n_Ellipse = 100000; //描くパーティクルの数
int n_Line = 4; //サインカーブの本数
int n_Rot = 2; // サインカーブの周期数
void setup() {
size(800, 800);
noStroke();
colorMode(HSB, 100, 100, 100, 100);
blendMode(SCREEN);
background(0);
for (int j = 0; j < n_Line; j++) {
for (int i = 0; i < n_Ellipse; i++) {
//x座標を計算(横並びにnEllipse個分)
float x = map(i, 0, n_Ellipse, 0+50, width-50);
//sinカーブの振幅をそれぞれのカーブによって変える
float rad = map(j, 0, n_Line, height/10, height/2);
//y座標をサインカーブとして計算
float y = height/2 + sin(map(i, 0, n_Ellipse, 0, TWO_PI * n_Rot)) * rad;
//x, y座標にノイズを加える //サインカーブの中間で一番ノイズが激しくなるように調整
x += tan(TWO_PI * noise(x, y)) * sin(map(i, 0, n_Ellipse, 0, PI)) * 10;
y += tan(TWO_PI * noise(y, y)) * cos(map(i, 0, n_Ellipse, 0, PI)) * 10;
//サインカーブの最初から最後にかけてパーティクルの大きさを変える(0→1.5→0)
float esize = sin(map(i, 0, n_Ellipse, 0, PI)) * 1.5;
float col = sin(map(i, 0, n_Ellipse, 0, PI)) * 100;
fill(col, 70, 100, 50);
ellipse(x, y, esize, esize);
}
}
}
▼カーブ一本にしてノイズ大目に。結構お気に入り。
▼その他雑多に貼っておきます、基本的なコードは一緒です。