見出し画像

generativeart_036

// 作品概要:
// (C)2023 sakuzo_arts

// Global変数
String APPNAME = "generativeart_036";

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

// 描画
void draw() {
  // 背景色設定
  background(255);
  noFill();
  noStroke();
  
  // 描画処理
  drawpPttern(10);
  
  // フッター表示
  drawFooter();
}

// 円をを描画する関数
void drawpPttern(int LINE_NUMBER){
  
  for(int i = 0; i < LINE_NUMBER + 1; i = i + 1){
    for(int j = 0; j < LINE_NUMBER + 1; j = j + 1){
      noStroke();
      
      float PIECE_WIDTH = width/LINE_NUMBER;
      float PIECE_HEIGHT = height/LINE_NUMBER;
      float CORNER_A_X = PIECE_WIDTH  * i;
      float CORNER_A_Y = PIECE_HEIGHT * j;
      float CORNER_B_X = PIECE_WIDTH  * i;
      float CORNER_B_Y = PIECE_HEIGHT * (j + 1);
      float CORNER_C_X = PIECE_WIDTH  * (i + 1);
      float CORNER_C_Y = PIECE_HEIGHT * (j + 1);
      float CORNER_D_X = PIECE_WIDTH  * (i + 1);
      float CORNER_D_Y = PIECE_HEIGHT * j;
      
      color SHAPE_COLOR = color(random(64, 192));
      
      // 各マスの背景
      fill(255);
      rect(CORNER_A_X, CORNER_A_Y, PIECE_WIDTH, PIECE_HEIGHT);
      
      int SHAPE_TYPE = int(random(0,5));
      switch(SHAPE_TYPE){
        case 0:
          // 図形描画
          fill(SHAPE_COLOR);
          rect(CORNER_A_X, CORNER_A_Y, PIECE_WIDTH, PIECE_HEIGHT);
          break; 
        case 1:
          // 図形描画
          fill(SHAPE_COLOR);
          circle(CORNER_A_X + PIECE_WIDTH / 2, CORNER_A_Y + PIECE_HEIGHT / 2, PIECE_WIDTH);
          break; 
        case 2:
          // 直角三角形を描画
          fill(SHAPE_COLOR);
          beginShape();
            vertex(CORNER_A_X, CORNER_A_Y);
            vertex(CORNER_B_X, CORNER_B_Y);
            vertex(CORNER_C_X, CORNER_C_Y);
          endShape(CLOSE);
          break; 
        case 3:
          // 二等辺三角形を描画
          fill(SHAPE_COLOR);
          beginShape();
            vertex(CORNER_A_X + PIECE_WIDTH / 2, CORNER_A_Y);
            vertex(CORNER_B_X, CORNER_B_Y);
            vertex(CORNER_C_X, CORNER_C_Y);
          endShape(CLOSE);
          break; 
        case 4:
          // ひし形を描画
          fill(SHAPE_COLOR);
          beginShape();
            vertex(CORNER_A_X + PIECE_WIDTH / 2, CORNER_A_Y);
            vertex(CORNER_A_X, CORNER_A_Y + PIECE_HEIGHT / 2);
            vertex(CORNER_A_X + PIECE_WIDTH / 2, CORNER_A_Y + PIECE_HEIGHT);
            vertex(CORNER_A_X + PIECE_WIDTH, CORNER_B_Y - PIECE_HEIGHT / 2);            
          endShape(CLOSE);
          break; 
        default:
      }
    }
  }
}



// フッターを表示する関数
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");
  }
}

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