Blame onefile/anim-cube.c

Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
#include <math.h>
Ivan Mahonin a5e8d6
#include <helianthus.h>
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
#define LINE 0.05
Ivan Mahonin a5e8d6
#define DOT  0
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
double dx = 0.4;
Ivan Mahonin a5e8d6
double dy = 0.4;
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
void drawLine(double pos) {
Ivan Mahonin a5e8d6
  line(0, 0, pos, 0);
Ivan Mahonin a5e8d6
  circle(0, 0, DOT);
Ivan Mahonin a5e8d6
  circle(pos, 0, DOT);
Ivan Mahonin a5e8d6
}
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
void drawQuad(double pos) {
Ivan Mahonin a5e8d6
  saveState();
Ivan Mahonin a5e8d6
  noFill();
Ivan Mahonin a5e8d6
  moveTo(0, 0);
Ivan Mahonin a5e8d6
  lineTo(1, 0);
Ivan Mahonin a5e8d6
  lineTo(1, pos);
Ivan Mahonin a5e8d6
  lineTo(0, pos);
Ivan Mahonin a5e8d6
  closePath();
Ivan Mahonin a5e8d6
  restoreState();
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  circle(0, 0, DOT);
Ivan Mahonin a5e8d6
  circle(1, 0, DOT);
Ivan Mahonin a5e8d6
  circle(0, pos, DOT);
Ivan Mahonin a5e8d6
  circle(1, pos, DOT);
Ivan Mahonin a5e8d6
}
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
void drawCube(double pos) {
Ivan Mahonin a5e8d6
  double ddx = pos*dx;
Ivan Mahonin a5e8d6
  double ddy = pos*dy;
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  saveState();
Ivan Mahonin a5e8d6
  noFill();
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  moveTo(0, 0);
Ivan Mahonin a5e8d6
  lineTo(1, 0);
Ivan Mahonin a5e8d6
  lineTo(1, 1);
Ivan Mahonin a5e8d6
  lineTo(0, 1);
Ivan Mahonin a5e8d6
  closePath();
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  moveTo(ddx + 0, ddy + 0);
Ivan Mahonin a5e8d6
  lineTo(ddx + 1, ddy + 0);
Ivan Mahonin a5e8d6
  lineTo(ddx + 1, ddy + 1);
Ivan Mahonin a5e8d6
  lineTo(ddx + 0, ddy + 1);
Ivan Mahonin a5e8d6
  closePath();
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  line(0, 0, ddx + 0, ddy + 0);
Ivan Mahonin a5e8d6
  line(1, 0, ddx + 1, ddy + 0);
Ivan Mahonin a5e8d6
  line(0, 1, ddx + 0, ddy + 1);
Ivan Mahonin a5e8d6
  line(1, 1, ddx + 1, ddy + 1);
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  restoreState();
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  circle(0, 0, DOT);
Ivan Mahonin a5e8d6
  circle(1, 0, DOT);
Ivan Mahonin a5e8d6
  circle(0, 1, DOT);
Ivan Mahonin a5e8d6
  circle(1, 1, DOT);
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  circle(ddx + 0, ddx + 0, DOT);
Ivan Mahonin a5e8d6
  circle(ddx + 1, ddx + 0, DOT);
Ivan Mahonin a5e8d6
  circle(ddx + 0, ddx + 1, DOT);
Ivan Mahonin a5e8d6
  circle(ddx + 1, ddy + 1, DOT);
Ivan Mahonin a5e8d6
}
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
void init() {
Ivan Mahonin a5e8d6
}
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
void draw() {
Ivan Mahonin a5e8d6
  double w = windowGetWidth();
Ivan Mahonin a5e8d6
  double h = windowGetHeight();
Ivan Mahonin a5e8d6
  double t = windowGetSeconds();
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  saveState();
Ivan Mahonin a5e8d6
  translate(w/2, h/2);
Ivan Mahonin a5e8d6
  zoom(100);
Ivan Mahonin a5e8d6
  translate(-0.5, -0.5);
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  fill(COLOR_BLACK);
Ivan Mahonin a5e8d6
  stroke(COLOR_BLACK);
Ivan Mahonin a5e8d6
  strokeWidth(LINE);
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  double a = t/3*2*PI;
Ivan Mahonin a5e8d6
  double pos = 0.5*(1 - cos(a))*3;
Ivan Mahonin a5e8d6
  if (pos < 1) drawLine(pos); else
Ivan Mahonin a5e8d6
    if (pos < 2) drawQuad(pos-1); else
Ivan Mahonin a5e8d6
      drawCube(pos-2);
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
  restoreState();
Ivan Mahonin a5e8d6
}
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
Ivan Mahonin a5e8d6
int main() {
Ivan Mahonin a5e8d6
  windowSetVariableFrameRate();
Ivan Mahonin a5e8d6
  windowSetResizable(TRUE);
Ivan Mahonin a5e8d6
  windowSetInit(&init);
Ivan Mahonin a5e8d6
  windowSetDraw(&draw);
Ivan Mahonin a5e8d6
  windowRun();
Ivan Mahonin a5e8d6
  return 0;
Ivan Mahonin a5e8d6
}