Blame onefile/gen-round-grid.c

a5e8d6
a5e8d6
#include <math.h></math.h>
a5e8d6
#include <helianthus.h></helianthus.h>
a5e8d6
a5e8d6
a5e8d6
#define WIDTH    285.0
a5e8d6
#define HEIGHT   200.0
a5e8d6
#define RES       10.0
a5e8d6
#define THIKNESS   0.25
a5e8d6
#define ALPHA      0.50
a5e8d6
a5e8d6
#define DIAMETER  10.0
a5e8d6
a5e8d6
a5e8d6
int cols;
a5e8d6
int rows;
a5e8d6
double border;
a5e8d6
a5e8d6
a5e8d6
Framebuffer framebuffer;
a5e8d6
Animation fbAnim;
a5e8d6
a5e8d6
a5e8d6
a5e8d6
void generate() {
a5e8d6
  double d = DIAMETER;
a5e8d6
  double r = d/2.0;
a5e8d6
a5e8d6
  saveState();
a5e8d6
  target(framebuffer);
a5e8d6
  clear();
a5e8d6
a5e8d6
  zoom(RES);
a5e8d6
  translate(WIDTH/2.0, HEIGHT/2.0);
a5e8d6
  noFill();
a5e8d6
  double c = 1 - ALPHA;
a5e8d6
  stroke(colorByRGBA(c, c, c, 1));
a5e8d6
  strokeWidth(THIKNESS);
a5e8d6
a5e8d6
  translate(-(cols-1)*d, -(rows-1)*d);
a5e8d6
a5e8d6
  double xx = (cols-1)*d*2;
a5e8d6
  double yy = (rows-1)*d*2;
a5e8d6
  circle( 0,  0, r);
a5e8d6
  circle( 0, yy, r);
a5e8d6
  circle(xx,  0, r);
a5e8d6
  circle(xx, yy, r);
a5e8d6
a5e8d6
  for(int y = 0; y < rows; ++y) {
a5e8d6
    double py = y*d*2 - r;
a5e8d6
    for(int x = 1; x < (cols-1)*4; ++x) {
a5e8d6
      arc(x*r-d, py, d, d, -120,   0);
a5e8d6
      arc(x*r  , py, d, d,   60, 180);
a5e8d6
    }
a5e8d6
    arc(-r  , py, d, d,  90, 150);
a5e8d6
    arc(0   , py, d, d,  60, 120);
a5e8d6
    arc(xx-d, py, d, d,-120, -60);
a5e8d6
    arc(xx-r, py, d, d, -90, -30);
a5e8d6
  }
a5e8d6
a5e8d6
  for(int x = 0; x < cols; ++x) {
a5e8d6
    double px = x*d*2 - r;
a5e8d6
    for(int y = 1; y < (rows-1)*4; ++y) {
a5e8d6
      arc(px, y*r-d, d, d, -30,  90);
a5e8d6
      arc(px, y*r  , d, d, 150, 270);
a5e8d6
    }
a5e8d6
    arc(px, -r  , d, d, 180, 240);
a5e8d6
    arc(px, 0   , d, d, 150, 210);
a5e8d6
    arc(px, yy-d, d, d, -30,  30);
a5e8d6
    arc(px, yy-r, d, d,   0,  60);
a5e8d6
  }
a5e8d6
a5e8d6
  viewportSave("data/output/generated-round-grid.png");
a5e8d6
  restoreState();
a5e8d6
}
a5e8d6
a5e8d6
a5e8d6
void init() {
a5e8d6
  double border = 2*THIKNESS;
a5e8d6
  cols = ((int)floor((WIDTH - 2*border)/DIAMETER + 0.001) + 1)/2;
a5e8d6
  rows = ((int)floor((HEIGHT - 2*border)/DIAMETER + 0.001) + 1)/2;
a5e8d6
a5e8d6
  int w = ceil(WIDTH*RES - 0.001);
a5e8d6
  int h = ceil(HEIGHT*RES - 0.001);
a5e8d6
  framebuffer = createFramebuffer(w, h);
a5e8d6
  fbAnim = createAnimationFromFramebuffer(framebuffer);
a5e8d6
a5e8d6
  generate();
a5e8d6
}
a5e8d6
a5e8d6
a5e8d6
void draw() {
a5e8d6
  double w = windowGetWidth();
a5e8d6
  double h = windowGetHeight();
a5e8d6
a5e8d6
  if (keyWentDown("space")) generate();
a5e8d6
a5e8d6
  saveState();
a5e8d6
  translate(w/2, h/2);
a5e8d6
  zoom(w/WIDTH);
a5e8d6
  fill(COLOR_WHITE);
a5e8d6
  noStroke();
a5e8d6
  rectTextured(fbAnim, -WIDTH/2.0, -HEIGHT/2.0, WIDTH, HEIGHT);
a5e8d6
  restoreState();
a5e8d6
}
a5e8d6
a5e8d6
a5e8d6
int main() {
a5e8d6
  windowSetVariableFrameRate();
a5e8d6
  windowSetResizable(TRUE);
a5e8d6
  windowSetInit(&init);
a5e8d6
  windowSetDraw(&draw);
a5e8d6
  windowRun();
a5e8d6
}
a5e8d6