見出し画像

generativeart_022


// 作品概要:
// 広がる四角形

// Global変数
String APPNAME = "generativeart_022";
float RECTANGLE_X;       // 四角形の始点(左上)の座標X
float RECTANGLE_Y;       // 四角形の始点(左上)の座標Y
float RECTANGLE_WIDTH;   // 四角形の幅
float RECTANGLE_HEIGHT;  // 四角形の高さ
float LINE_START_X;      // 中心から伸びる線の始点座標X
float LINE_START_Y;      // 中心から伸びる線の始点座標X
int DRAW_NUMBER;         // 描画する多角形の数

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

// 描画
void draw() {
  pushMatrix();
  DRAW_NUMBER = 60;
  drawRectangle(DRAW_NUMBER);
  popMatrix();
  copyright();
}

// 指定した数の四角形を描画する関数
void drawRectangle(int DRAW_NUMBER){
  background(255);
  noStroke();
  noFill();
  
  float Center_X = width / 2 + 150;
  float Center_Y = height / 2;
  
  // キャンバスの中心座標を移動する
  translate(Center_X, Center_Y);
  
  // 長方形の描画方法を変更する
  rectMode(CENTER);
  
  // 放射点を決める
  RECTANGLE_X = 0;
  RECTANGLE_Y = 0;
  LINE_START_X = 0;
  LINE_START_Y = 0;
  
  // 四角形を放射状の描画をする
  for (int i = 0; i < DRAW_NUMBER; i++) {
    RECTANGLE_WIDTH = random(20, 30) * i;
    RECTANGLE_HEIGHT = RECTANGLE_WIDTH * 0.6;
    
    strokeWeight(random(3, 5));
    strokeCap(ROUND);
    strokeJoin(ROUND);
    stroke(getColor());
    rect(RECTANGLE_X, RECTANGLE_Y, RECTANGLE_WIDTH, RECTANGLE_HEIGHT);
  }
  
  // 中心から長方形の頂点への線を描画する
  strokeWeight(1);
  stroke(getColor());
  line(LINE_START_X, LINE_START_Y, (-width + LINE_START_X)/0.6, -height);
  line(LINE_START_X, LINE_START_Y, (+width + LINE_START_X)/0.6, -height);
  line(LINE_START_X, LINE_START_Y, (-width + LINE_START_X)/0.6, +height);
  line(LINE_START_X, LINE_START_Y, (+width + LINE_START_X)/0.6, +height);
}

// 色を設定する
color getColor(){
  
  float COLOR_R = 255;
  float COLOR_G = random(129, 255);
  float COLOR_B = random(0, 128);
  float COLOR_A = random(129, 255);
  color COLOR_RGBA = color(COLOR_R, COLOR_G, COLOR_B, COLOR_A);

  return COLOR_RGBA;
}

// 著作権を表示する関数
void copyright(){
  // 背景
  noStroke();
  
  // 長方形の描画方法をデフォルトに戻す
  rectMode(CORNER);

  fill(255, 255, 255, 192);
  rect(0, height - 45, width, 45);

  // 著作権表示
  String MESSAGE = "(C)2023 Sgr.Hataya";
  textAlign(CENTER, CENTER);
  textSize(25);
  fill(64);
  text(MESSAGE, width/2, height-30);
}

// キー操作でイベント実行
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");
  }
}

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