見出し画像

generativeart_031


// 作品概要:
// ちょっと変わった円の描き方
// (C)2023 sakuzo_arts

// Global変数
String APPNAME = "generativeart_031";
float CIRCLE_CENTER_X;  // 円の中心の座標X
float CIRCLE_CENTER_Y;  // 円の中心の座標Y
float CIRCLE_DIAMETER;  // 円の直径

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

// 描画
void draw() {
  // 背景色設定
  background(0);
  
  // 描画処理
  drawCircle(width * 0.8);
  drawCircle(width * 0.6);
  drawCircle(width * 0.4);
  
  // フッター表示
  drawFooter();
}

// 円をを描画する関数
void drawCircle(float CIRCLE_DIAMETER){
  
  // 円の直径と半径を設定
  float CIRCLE_RADIUS = CIRCLE_DIAMETER / 2;
  
  // 円の中心座標を設定
  CIRCLE_CENTER_X = width / 2;
  CIRCLE_CENTER_Y = height / 2;
  
  // 円周上の座標を格納する変数を定義
  float INIT_CIRCUM_X;
  float INIT_CIRCUM_Y;
  float NEXT_CIRCUM_X;
  float NEXT_CIRCUM_Y;
  float PREV_CIRCUM_X;
  float PREV_CIRCUM_Y;
  
  
  // 初期値の設定
  INIT_CIRCUM_X = CIRCLE_CENTER_X + CIRCLE_RADIUS * cos(radians(0));
  INIT_CIRCUM_Y = CIRCLE_CENTER_Y + CIRCLE_RADIUS * sin(radians(0));
  PREV_CIRCUM_X = INIT_CIRCUM_X;
  PREV_CIRCUM_Y = INIT_CIRCUM_Y;
  
  // 変わった円の描画方法
  for (int i = 0; i < 360; i = i + 3) {
    
    // 円周上の点
    NEXT_CIRCUM_X = CIRCLE_CENTER_X + (CIRCLE_RADIUS + random(-20, 20)) * cos(radians(i));
    NEXT_CIRCUM_Y = CIRCLE_CENTER_Y + (CIRCLE_RADIUS + random(-20, 20)) * sin(radians(i));
    
    // 中心と円周上の点を結ぶ三角形
    strokeWeight(1);
    noStroke();
    fill(getColor());
    triangle(CIRCLE_CENTER_X, CIRCLE_CENTER_Y, PREV_CIRCUM_X, PREV_CIRCUM_Y, NEXT_CIRCUM_X, NEXT_CIRCUM_Y);
    
    PREV_CIRCUM_X = NEXT_CIRCUM_X;
    PREV_CIRCUM_Y = NEXT_CIRCUM_Y;
  }
  
  // 中心と円周上の点を結ぶ三角形
  strokeWeight(1);
  noStroke();
  fill(getColor());
  triangle(CIRCLE_CENTER_X, CIRCLE_CENTER_Y, PREV_CIRCUM_X, PREV_CIRCUM_Y, INIT_CIRCUM_X, INIT_CIRCUM_Y);

}

// 色を設定する関数
color getColor(){
  
  float COLOR_R = 255;
  float COLOR_G = 255;
  float COLOR_B = 255;
  float COLOR_A = random(32, 128);
  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");
  }
}

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