とある人類

書きたいことがあるときに書き残すログ

眠れない夜に

寝苦しい夜に、ふと見かけた歯車を書く記事。

なんかいい感じにならないかなぁと思ったけれど、ならなかったという話。

Gear g;

void setup() {
  size(400, 400);
  g = new Gear(width/2.0, height/2.0, 150, 180);
}

void draw() {
  background(-1);
  g.display();
  g.update();
}

class Gear {
  float px, py, inR, outR, rotateR;
  Gear(float _px, float _py, float _inR, float _outR) {
    px = _px;
    py = _py;
    inR = _inR;
    outR = _outR;
    rotateR = 0;
  }

  void update() {
    rotateR++;
  }

  void display() {
    translate(px, py);
    rotate(radians(rotateR));
    stroke(50);
    strokeWeight(1);
    fill(50);
    ellipse(0, 0, inR*2, inR*2);
    float div=8;
    for (int i=0; i<div; i++) {
      beginShape();
      vertex(v(inR, 360*(i/div)-360/(div*4)).x, v(inR, 360*(i/div)-360/(div*4)).y);
      vertex(v(outR, 360*(i/div)-360/(div*6)).x, v(outR, 360*(i/div)-360/(div*6)).y);
      vertex(v(outR, 360*(i/div)+360/(div*6)).x, v(outR, 360*(i/div)+360/(div*6)).y);
      vertex(v(inR, 360*(i/div)+360/(div*4)).x, v(inR, 360*(i/div)+360/(div*4)).y);
      endShape();
    }
    fill(255);
    ellipse(0, 0, inR/3, inR/3);
  }

  PVector v(float _r, float _deg) {
    PVector pv = new PVector(_r*cos(radians(_deg)), _r*sin(radians(_deg)));
    return  pv;
  }
}