見出し画像

ProcessingによるGenerative art作品#1

初めましておかずです。趣味でGenerative artをやっています。

今回作ったものはこちらです。

コードはこちら

int num =  5;    //トゲの数
Flower[] flowerArr = {};
Flower thisFlower;

void setup() {
  size(800, 800);
  background(250);
  pixelDensity(2);
  colorMode(HSB, 360, 100, 100, 100);
}

void draw() {
  //マウスを押しているときに描画
  if (mousePressed) {
    drawFlower();
  }

  for (int i=0; i <flowerArr.length; i++) {
    thisFlower = flowerArr[i];
    thisFlower.updateMe();
  }
}

void drawFlower() {
  for (int i= 0; i<num; i++) {
    thisFlower  = new Flower();
    thisFlower.drawMe(mouseX, mouseY);
    flowerArr = (Flower[])append(flowerArr, thisFlower);     //配列に加える
  }
}

//スペースキーで保存
void keyPressed() {
  if (key == ' ') {
    saveFrame("####.png");
  }
}

//クラス
class Flower {
  //属性(フィールド)
  float angle;
  float rad; 
  float pointX, pointY; 
  float xoff, yoff;
  float xmove, ymove;
  color col;

  //コンストラクタ
  Flower() {
    rad = 6;    //半径
    xmove = random(3) * (random(1) > 0.5 ? 1 : -1);    //-3から3までのランダムな値
    ymove = random(3) * (random(1) > 0.5 ? 1 : -1);
    col = color((random(360)), 80, 80, 20);
  }
  //メソッド
  void drawMe(float x, float y) {
    pointX = x;
    pointY = y;
    noStroke();
    fill(col);
    pushMatrix();
    translate(pointX, pointY);
    rotate(angle*20);
    if (rad >= 0) {
      for (int a = 0; a < 360; a += 45) {
        float xoff = cos(radians(a)) * rad ;
        float yoff = sin(radians(a)) * rad ;
        ellipse(0 + xoff, 0 + yoff, rad*2, rad*2);
      }
      ellipse(0, 0, rad*2, rad*2);
    }
    popMatrix();
  }
  void updateMe() {
    pointX +=  xmove ;
    pointY +=  ymove ;
    angle += 0.01;    //回転させる
    rad -= 0.1;    //半径を小さくしていく
    drawMe(pointX, pointY);
  }
}

プログラミング自体初心者なのでコードについて何かあれば教えていただけるとうれしいです。

クラス名がFlowerなのは花のようなモノを作ろうとしていたからです。
色々試しているうちに棘がgeneratしていましたね。
Processingで自分の頭の中にあるものを表現するってとても難しいと実感してるんですが、今回みたいに全然違うけどこれはこれで素敵ってものが見つかるんでバシバシ挑戦していこうかなと。


(2019/02/28)コード修正

応援してくださる方!いつでもサポート受け付けてます!