BioErrorLog Tech Blog

試行錯誤の記録

Generative Art #3 - Processing作品

おはよう。@bioerrorlogです。

ProcessingによるGenerative Art作品
3作目を記録します。

自作品まとめはこちら: www.bioerrorlog.work

Output

f:id:BioErrorLog:20191211070556p:plain f:id:BioErrorLog:20191211070618p:plain

フル解像度/その他出力パターンはこちら:
Generative_3 - BioErrorLog - pixiv


Material

使用言語: Processing 3.5.3

Processingというプログラミング言語に聞き覚えがない、という方は是非こちらをご参考ください:
www.bioerrorlog.work


Source Code

GitHubはこちら

float _xStart;
float _xNoise, _yNoise;
float _radius;
float _ang;
float _centX, _centY;

void setup(){
  size(1920,1080); // 壁紙サイズ
  background(255); // 255: 白 0にすれば黒
  smooth();
  
  _xStart = random(10);
  _xNoise = _xStart;
  _yNoise = random(10);
  _radius = random(1);
  _ang = random(10);
  _centX = width /2;
  _centY = height /2;
}


void drawPoint(float x, float y, float noiseFactor){
  /*
  x, yを中心座標としてグレーの円を描く
  noiseFactorに渡すnoise関数で各要素に揺らぎを与える
  */

  pushMatrix();
  translate(x, y);
  rotate(noiseFactor * radians(360*4));

  float edgeSize = noiseFactor * 500;
  float grey = 50 + (noiseFactor * 120);
  float alpha = 100 + (noiseFactor * 120);

  noStroke();
  fill(grey, alpha);
  ellipse(0,0, edgeSize, edgeSize);

  popMatrix();
}

void draw(){
  _yNoise += 0.01;
  _xNoise += 0.01;
  _ang += 0.01;
  _radius += 1;

  float rad = radians(noise(_ang));
  drawPoint(_centX/2 + cos(rad) * _radius, _centY, noise(_xNoise,_yNoise)); // noise()を二次元にしたことに特に理由はない
}


void keyPressed(){
  /*
  ENTERキー押下: 画像を保存する
  BACKSPACEキー押下: モデルをリセットする
  */

  if (keyCode == ENTER){
    saveFrame("generative_3_####.png");
  }
  if (keyCode == BACKSPACE){
    setup();
  }
}

Discussion

丸を少しずつ右にずらしながら重ねたモデルです。
各要素の定義にnoise()を加えることで、丸の半径やグレーの色合い、フレームごとの丸の移動距離に揺らぎが生じます。

チェスのポーンの駒のような、滑らかながら唐突な変化を見せる表面のパターンが好きです。


See also

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

Reference