gotutiyan’s blog

競技プログラミングをやったりopenframeworksでお絵かきをしたりしています。

儚さ

四角をたくさん書いて、大きくしたり小さくしたりしています。色は小さくなる度にランダムで変わり、良い感じの色になってもすぐに変わってしまう様子が儚かったのでこの題名に。


変数sizeが0になる度に、色と描く四角の個数を変化させているところがポイントです。
色は四角達がグラデーションになるように、HSBのHを5ずつずらして描画しています。色を変えるためには、5ずつ足す対象となる基準となる値をランダムにして毎回決めるべきです。これには今回colorCenterを使っています。

#include "ofApp.h"
#define rep(i,j,k) for(int i=j;i<k;i++)
int size=0,speed=2;
int num=20,colorCenter=ofRandom(255);
void ofApp::setup(){
    ofSetFrameRate(60);
    ofSetBackgroundColor(0);
    ofSetColor(255);
    ofSetCircleResolution(32);
    ofNoFill();
}

void ofApp::update(){
    
}

void ofApp::draw(){
    rep(i,0,num){
        int pic=colorCenter+i*5;
        if(pic<510)pic%=255;
        else pic%=510;
        ofColor c;
        c.setHsb(pic,255,255);
        ofSetColor(c);
        ofPushMatrix();
        ofTranslate(ofGetWidth()/2, ofGetHeight()/2);
        ofRotate(ofGetFrameNum()/2.0+i*5);
        ofDrawRectangle(-size/2,-size/2,size,size);
        ofPopMatrix();
    }
    
    size+=speed;
    if(size<0){
        speed*=-1;
        num-=6;
        if(num<0)num=abs(20+num);
        colorCenter=ofRandom(255);
    }
    
    if(size>300)speed*=-1;
}