Blame onefile/color-papers.c

Ivan Mahonin 261920
Ivan Mahonin 261920
#include <math.h>
Ivan Mahonin 261920
#include <helianthus.h>
Ivan Mahonin 261920
Ivan Mahonin 261920
#define WIDTH  1024
Ivan Mahonin 261920
#define HEIGHT  768
Ivan Mahonin 261920
#define SIZE    100
Ivan Mahonin 261920
#define COUNT   100
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
typedef struct {
Ivan Mahonin 261920
  double x, y, s, r, rk;
Ivan Mahonin 261920
} Rect;
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
Framebuffer fb;
Ivan Mahonin 261920
Animation anim;
Ivan Mahonin 261920
Rect rects[COUNT];
Ivan Mahonin 261920
int id;
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
void generateRect(Rect *r) {
Ivan Mahonin 261920
  r->x = randomFloat();
Ivan Mahonin 261920
  r->y = randomFloat();
Ivan Mahonin 261920
  r->s = randomFloat();
Ivan Mahonin 261920
  r->r = randomFloat();
Ivan Mahonin 261920
  r->rk = randomFloat()*2 - 1;
Ivan Mahonin 261920
}
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
void drawRect(Rect *r, double a) {
Ivan Mahonin 261920
  a = (1 - cos(a*PI))/2;
Ivan Mahonin 261920
  double s = r->s * a * SIZE * ((mouseX() - WIDTH / 2) + (mouseY() - HEIGHT / 2))/100;
Ivan Mahonin 261920
  double rot = a*r->rk*180 + r->r*360;
Ivan Mahonin 261920
Ivan Mahonin 261920
  saveState();
Ivan Mahonin 261920
  //stroke(colorByRGBA(0, 0, 0, a));
Ivan Mahonin 261920
  fill(colorByHSVA(r->x*360, 1, 1, a));
Ivan Mahonin 261920
  translate(r->x*WIDTH, r->y*HEIGHT);
Ivan Mahonin 261920
  rotate(rot);
Ivan Mahonin 261920
  rect(-s/2, -s/2, s, s);
Ivan Mahonin 261920
  restoreState();
Ivan Mahonin 261920
}
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
void init() {
Ivan Mahonin 261920
  fb = createFramebuffer(WIDTH, HEIGHT);
Ivan Mahonin 261920
  anim = createAnimationFromFramebuffer(fb);
Ivan Mahonin 261920
  for(int i = 0; i < COUNT; ++i)
Ivan Mahonin 261920
    generateRect(&rects[i]);
Ivan Mahonin 261920
  saveState();
Ivan Mahonin 261920
  target(fb);
Ivan Mahonin 261920
  clear();
Ivan Mahonin 261920
  restoreState();
Ivan Mahonin 261920
}
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
void draw() {
Ivan Mahonin 261920
  saveState();
Ivan Mahonin 261920
  noStroke();
Ivan Mahonin 261920
Ivan Mahonin 261920
  rectTextured(anim, 0, 0, WIDTH, HEIGHT);
Ivan Mahonin 261920
  for(int i = 0; i < COUNT; ++i)
Ivan Mahonin 261920
    drawRect(&rects[(id + i)%COUNT], 1.0 - (double)i/COUNT);
Ivan Mahonin 261920
Ivan Mahonin 261920
  target(fb);
Ivan Mahonin 261920
  drawRect(&rects[id], 1.0);
Ivan Mahonin 261920
  generateRect(&rects[id]);
Ivan Mahonin 261920
  id = (id + 1)%COUNT;
Ivan Mahonin 261920
Ivan Mahonin 261920
  restoreState();
Ivan Mahonin 261920
}
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
int main() {
Ivan Mahonin 261920
  windowSetVariableFrameRate();
Ivan Mahonin 261920
  windowSetSize(WIDTH, HEIGHT);
Ivan Mahonin 261920
  windowSetInit(&init);
Ivan Mahonin 261920
  windowSetDraw(&draw);
Ivan Mahonin 261920
  windowRun();
Ivan Mahonin 261920
}
Ivan Mahonin 261920