コエンザイムのブログ

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

Auto Generated Gridをつくりました

Auto Generated Gridをつくりました。ジェネレーティブアートです。中心位置から、上下左右のいずれか一方向に罫線を引くことを繰り返しています。線の色は一定の確率で変更されるようにしました。

opensea.io

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

// Grid
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 Logo image size
//final int cMyWidth = 350;
//final int cMyHeight = 350;
//final String cFILE_NAME = "Grid_Logo_";

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

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

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

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

//// For Test
//final int cMyWidth = 800;
//final int cMyHeight = 450;
//final String cFILE_NAME = "Grid_";

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

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

void setup()
{
  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);
      //println(cFILE_NAME + nf(cSTART_NUM + i, cDIGIT_NUM)
      //  + "_" + dateStr + "T" + timeStr + "Z" + ".png");
      save(cFILE_NAME + nf(cSTART_NUM + i, cDIGIT_NUM) 
        + "_" + dateStr + "T" + timeStr + "Z" + ".png");
    }
  }
}

void myDraw()
{
  int i;
  int x = (width - 1) / 2;
  int y = (height - 1) / 2;
  int gridUnit = width / 20 - 2;
  int hRndMax = 19;
  
  colorMode(HSB, hRndMax - 1, 100, 100);
  stroke(int(random(hRndMax)), 50, 100);
  strokeWeight(3);
  strokeCap(ROUND);
  
  background(0);
  
  for(i=0; i < 770; i++)
  {
    switch(int(random(4)))
    {
      case 0:
        if (y >= 0)
        {
          if(int(random(10)) == 0) { stroke(int(random(hRndMax)), 50, 100); }
          line(x, y, x, y - gridUnit);
          y -= gridUnit;
        }
        else
        {
          i--;
        }
        break;
      case 1:
        if (x >= 0)
        {
          if(int(random(10)) == 0) { stroke(int(random(hRndMax)), 50, 100); }
          line(x, y, x - gridUnit, y);
          x -= gridUnit;
        }
        else
        {
          i--;
        }
        break;
      case 2:
        if (y <= height)
        {
          if(int(random(10)) == 0) { stroke(int(random(hRndMax)), 50, 100); }
          line(x, y, x, y + gridUnit);
          y += gridUnit;
        }
        else
        {
          i--;
        }
        break;
      case 3:
        if (x <= width)
        {
          if(int(random(10)) == 0) { stroke(int(random(hRndMax)), 50, 100); }
          line(x, y, x + gridUnit, y);
          x += gridUnit;
        }
        else
        {
          i--;
        }
        break;
    }
  }
}