コエンザイムのブログ

ジェネレーティブアートが好きです

Auto Generated Circles 2をつくりました

Auto Generated Circles 2をつくりました。ジェネレーティブアートです。色と大きさを漸次的に変化させた多数の円をランダムな位置に描画しました。

opensea.io

以下はソースコードです。開発環境はMacBook Air、Processingです。

// Circles2
import  java.time.LocalDateTime;
import  java.time.ZoneId;
import  java.time.format.DateTimeFormatter;

final boolean cSAVE_FLG = false;
final int cSAVE_NUM = 1;
final int cSTART_NUM = 0;
final int cDIGIT_NUM = 2;

//// For Profile image size
//final int cMyWidth = 350;
//final int cMyHeight = 350;
//final String cFILE_NAME = "Circles2_Profile_";

//// For Profile Banner image size
//final int cMyWidth = 1400;
//final int cMyHeight = 400;
//final String cFILE_NAME = "Circles2_Profile_Banner_";

//// For Logo image size
//final int cMyWidth = 350;
//final int cMyHeight = 350;
//final String cFILE_NAME = "Circles2_Logo_";

//// For Featured image size
//final int cMyWidth = 600;
//final int cMyHeight = 400;
//final String cFILE_NAME = "Circles2_Featured_";

//// For Banner image size
//final int cMyWidth = 1400;
//final int cMyHeight = 400;
//final String cFILE_NAME = "Circles2_Banner_";

// For HD
final int cMyWidth = 1280;
final int cMyHeight = 720;
final String cFILE_NAME = "Circles2_";

//// For Full HD
//final int cMyWidth = 1920;
//final int cMyHeight = 1080;
//final String cFILE_NAME = "Circles2_";

final boolean cLOOP_FLG = true;
final float cFRAME_RATE = 0.3;

void settings() {
  size(cMyWidth, cMyHeight);
}

void setup()
{
  noStroke();
  if (cSAVE_FLG)
  {
    noLoop();
  }
  else if (cLOOP_FLG)
  {
    frameRate(cFRAME_RATE);
  }
  else
  {
    noLoop();
  }
}

void draw()
{
  int loopMax = 1;
  
  if (cSAVE_FLG)
  {
    loopMax = cSAVE_NUM;
  }

  for (int i = 0; i < loopMax; i++)
  {
    myDraw();
    if (cSAVE_FLG)
    {
      LocalDateTime utcDateTime = LocalDateTime.now(ZoneId.of("UTC"));
      DateTimeFormatter dateFrmt = DateTimeFormatter.ofPattern("uuuuMMdd");
      DateTimeFormatter timeFrmt = DateTimeFormatter.ofPattern("HHmmss,SSSSSS");
      String dateStr = dateFrmt.format(utcDateTime);
      String timeStr = timeFrmt.format(utcDateTime);
      save(cFILE_NAME + "#" + nf(cSTART_NUM + i, cDIGIT_NUM)
        + "_" + dateStr + "T" + timeStr + "Z" + ".png");
    }
  }
}

void myDraw()
{
  background(255);
  int red = int(random(255));
  int green = int(random(255));
  int blue = int(random(255));
  int redUnit = int(random(1, 3));
  int greenUnit = int(random(1, 3));
  int blueUnit = int(random(1, 3));
  int diameter = min(width, height);

  while (diameter >= 1)
  {
    fill(red, green, blue, 215);
    ellipse(int(random(width)), int(random(height)), diameter, diameter);
    red = (red + redUnit) % 256;
    green = (green + greenUnit) % 256;
    blue = (blue + blueUnit) % 256;
    diameter--;
  }
}