Blame onefile/iron-spring.c
|
Ivan Mahonin |
261920 |
#include <helianthus.h>
|
|
Ivan Mahonin |
261920 |
#include <math.h>
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
#define CIRCLES_COUNT 20
|
|
Ivan Mahonin |
261920 |
#define CIRCLES_RADIUS 25
|
|
Ivan Mahonin |
261920 |
#define RING_RADIUS 50
|
|
Ivan Mahonin |
261920 |
#define ROTATION_SPEED 70
|
|
Ivan Mahonin |
261920 |
#define RINGS_COUNT 3
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
double angles[6];
|
|
Ivan Mahonin |
261920 |
double speeds[6];
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
void init() {
|
|
Ivan Mahonin |
261920 |
background(colorByHSV(0, 0, 0.2));
|
|
Ivan Mahonin |
261920 |
}
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
void draw() {
|
|
Ivan Mahonin |
261920 |
for(int j = 1; j <= RINGS_COUNT; j++) {
|
|
Ivan Mahonin |
261920 |
saveState();
|
|
Ivan Mahonin |
261920 |
strokeWidth(CIRCLES_RADIUS + j*10);
|
|
Ivan Mahonin |
261920 |
translate(mouseX(), mouseY());
|
|
Ivan Mahonin |
261920 |
if (mouseDown("left")) {
|
|
Ivan Mahonin |
261920 |
angles[j] -= windowGetFrameTime() * (ROTATION_SPEED * (j/3.0));
|
|
Ivan Mahonin |
261920 |
speeds[j] = 0;
|
|
Ivan Mahonin |
261920 |
} else
|
|
Ivan Mahonin |
261920 |
if (mouseDown("right")) {
|
|
Ivan Mahonin |
261920 |
angles[j] += windowGetFrameTime() * (ROTATION_SPEED * (j/3.0));
|
|
Ivan Mahonin |
261920 |
speeds[j] = 0;
|
|
Ivan Mahonin |
261920 |
} else {
|
|
Ivan Mahonin |
261920 |
speeds[j] -= angles[j];
|
|
Ivan Mahonin |
261920 |
speeds[j] *= pow(0.1, windowGetFrameTime());
|
|
Ivan Mahonin |
261920 |
angles[j] += speeds[j]*windowGetFrameTime();
|
|
Ivan Mahonin |
261920 |
}
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
rotate(windowGetSeconds() + angles[j]);
|
|
Ivan Mahonin |
261920 |
|
|
Ivan Mahonin |
261920 |
for(int i = 0; i < CIRCLES_COUNT; i++) {
|
|
Ivan Mahonin |
261920 |
double a = 0;
|
|
Ivan Mahonin |
261920 |
//if (mouseDown("left"))
|
|
Ivan Mahonin |
261920 |
a = 360.0*i/CIRCLES_COUNT;
|
|
Ivan Mahonin |
261920 |
double x = 1 + 0.05*sin(windowGetSeconds()*10 + a/180*PI*13);
|
|
Ivan Mahonin |
261920 |
stroke(colorByHSV(a, 0.7, 1));
|
|
Ivan Mahonin |
261920 |
point(RING_RADIUS*j*x, 0);
|
|
Ivan Mahonin |
261920 |
rotate(360.0/CIRCLES_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 |
windowSetTitle("Iron Spring Simulator");
|
|
Ivan Mahonin |
261920 |
windowSetVariableFrameRate();
|
|
Ivan Mahonin |
261920 |
windowSetResizable(TRUE);
|
|
Ivan Mahonin |
261920 |
windowSetInit(&init);
|
|
Ivan Mahonin |
261920 |
windowSetDraw(&draw);
|
|
Ivan Mahonin |
261920 |
windowRun();
|
|
Ivan Mahonin |
261920 |
return 0;
|
|
Ivan Mahonin |
261920 |
}
|