見出し画像

generativeart_029

// 作品概要:
// 円を並べる
// (C)2023 sakuzo_arts

// Global変数
String APPNAME = "generativeart_029";
float CIRCLE_CENTER_X;  // 円の中心の座標X
float CIRCLE_CENTER_Y;  // 円の中心の座標Y
int LINES_NUM;          // 行数

// セットアップ
void setup() {
  size(800, 800);
  noLoop();
  background(255);
}

// 描画
void draw() {
  LINES_NUM = 30;
  drawCircle(LINES_NUM);
  drawFooter();
}

// 円をを描画する関数
void drawCircle(int LINES_NUM){
  // 背景色設定
  background(255);

  noStroke();
  noFill();
  
  // 円の直径を設定
  float CIRCLE_DIAMETER = height / LINES_NUM;
  
  // 円を描画する始点を設定
  CIRCLE_CENTER_X = 0;
  CIRCLE_CENTER_Y = CIRCLE_DIAMETER;

  for(int i = 0; i < width + 20; i = i + 80){
    CIRCLE_CENTER_X = i;
    
    for(int j = 0; j < height + 20; j = j + 80){
      CIRCLE_CENTER_Y = j;
      
      // 胴体
      for(int k = 0; k < 180; k = k + 1){
        
        // 線の色を指定する処理
        stroke(getColor());
      
        // 線の太さを指定する
        strokeWeight(random(1, 3));
        
        // 描画する線の座標を計算する
        float R = CIRCLE_DIAMETER + random(-5, 5);
        float X1 = CIRCLE_CENTER_X + (R * cos(radians(k)));
        float Y1 = CIRCLE_CENTER_Y + (R * sin(radians(k)));
        float X2 = CIRCLE_CENTER_X + (R * cos(radians(k) + PI));
        float Y2 = CIRCLE_CENTER_Y + (R * sin(radians(k) + PI));
        
        // 線を描画する
        line(X1, Y1, X2, Y2);
      }
      
      // 目玉:白目
      fill(255);
      circle(CIRCLE_CENTER_X - 5, CIRCLE_CENTER_Y + random(-3, 3), 10);
      circle(CIRCLE_CENTER_X + 5, CIRCLE_CENTER_Y + random(-3, 3), 10);
      
      // 目玉:黒目
      fill(0);
      circle(CIRCLE_CENTER_X - random(3, 7), CIRCLE_CENTER_Y + random(-1, 1), 3);
      circle(CIRCLE_CENTER_X + random(3, 7), CIRCLE_CENTER_Y + random(-1, 1), 3);
    }
  } 
}

// 色を設定する関数
color getColor(){
  
  float COLOR_R = 64;
  float COLOR_G = 64;
  float COLOR_B = 64;
  float COLOR_A = random(32, 64);
  color COLOR_RGBA = color(COLOR_R, COLOR_G, COLOR_B, COLOR_A);

  return COLOR_RGBA;
}

// フッターを表示する関数
void drawFooter(){
  // 長方形の描画方法をデフォルトに戻す
  rectMode(CORNER);

  // 長方形を背景として描画する
  noStroke();
  fill(255, 255, 255, 192);
  rect(0, height - 45, width, 45);

  // 作品名
  textAlign(LEFT, BOTTOM);
  textSize(20);
  fill(64);
  text(APPNAME, 30, height - 10);
  
  // 著作権表示
  textAlign(RIGHT, BOTTOM);
  textSize(20);
  fill(64);
  text("(C)2023 sakuzo_arts", width - 30, height - 10);
}

// キー操作でイベントを実行する関数
void keyPressed(){
  // スペースキーを押下で再描画
  if(key == ' '){
    redraw();
  }
  
  // Shift+sキーを押下で画像保存
  if(key == 'S'){
    int Y = year();
    int M = month();
    int D = day();
    int h = hour();
    int m = minute();
    int s = second();
    String FILENAME = APPNAME + "-" + Y + nf(M, 2) + nf(D, 2) + nf(h, 2) + nf(m, 2) + nf(s, 2);
    saveFrame(FILENAME + ".png");
  }
}


この記事が気に入ったらサポートをしてみませんか?