モノ創りで国造りを

ハード/ソフト問わず知見をまとめてます

Processingで画像単体を回転させるのが大変だった・・・

風車みたいにカラフルな花がクルクル回ると綺麗だろうなーと思って
Processingで創ろうと思い立ちました。

現時点の出来はこんなの。
f:id:yuji2yuji:20180822052940p:plain
gifだとこんなの。
f:id:yuji2yuji:20180822062212g:plain
こう見ると微妙ですね。
実際はもっと滑らかに動いてていい感じなのですが・・・

四角形を回転させるのが 想像以上に大変でした。
translateとrotateの使い方が勉強になりました。

ソースはこれ。

final int floNum = 100;
Flowers[] flowers = new Flowers[floNum];

int cnt;
void setup() {
  size(1600, 1200);
  smooth();
  noStroke();
  background(255);
  frameRate(30);
  for (int i=0; i<floNum; i++) {
    flowers[i] = new Flowers();
  }
}

void draw() {
  
  fill(255,200);
  rect(0,0,width, height);

  for (int i=0; i<floNum; i++) {
    flowers[i].rotateRect(cnt);
  }
  cnt++;
}

class Flowers {

  float sizeX;
  float sizeY;
  float posX;
  float posY;
  float centerX;
  float centerY;
  float speed;
  int startCnt;
  color colorFlower;
  float rotateCenter;


  Flowers() {
    posX = random(width);
    posY = random(height);
    sizeX = random(90)+10;
    sizeY = random(90)+10;
    centerX = posX + sizeX/2;
    centerY = posY + sizeY/2;
    speed = random(15)+ 10;
    colorFlower = color(random(150)+100, random(150)+100, random(150)+100, 220);
    startCnt = int(random(250));
    //rotateCenter = random(200) + 100;
    rotateCenter =0;
  }

  void rotateRect(int cnt) {
    if (cnt > startCnt) {
      fill(colorFlower);
      pushMatrix();
      translate(centerX, centerY);
      rotate((cnt-startCnt)*radians(speed));
      translate(-centerX - rotateCenter, -centerY - rotateCenter);
      rect(posX, posY, sizeX, sizeY);
      //rect(random(width), random(height), sizeX, sizeY);
      popMatrix();
    }
  }
}