From 2a08c37c3db23b27b963442fe273097915bc30ea Mon Sep 17 00:00:00 2001 From: glenda Date: Fri, 1 Jan 1988 08:56:45 +0000 Subject: [PATCH] spirals! --- .plan | 4 ++++ spiral.c | 23 +++++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 .plan diff --git a/.plan b/.plan new file mode 100644 index 0000000000000000000000000000000000000000..b12434bc5384003be282ca99880c11c99c2675f7 --- /dev/null +++ b/.plan @@ -0,0 +1,4 @@ +TODO for spirals.c: + * maybe fix screen tearing + * generate a proper spiral + * make the center a little less ugly diff --git a/spiral.c b/spiral.c index 5edb443aa252dddc9ac9c80d7e1515b856377548..53a211a283fe540fc21208abebd89d8435a12720 100644 --- a/spiral.c +++ b/spiral.c @@ -4,6 +4,7 @@ #include #define RAD (PI * 2) +#define DEG (PI / 180.0) Image *bg,*fg; @@ -11,13 +12,14 @@ int frametime; double spr; int wings; double wingrads; +double eccen; vlong starttime; void usage(void) { - fprint(2,"usage: %s [-f framerate] [-r rpm] [-w wings]\n", argv0); + fprint(2,"usage: %s [-f framerate] [-r rpm] [-w wings] [-e deg]\n", argv0); exits("usage"); } @@ -62,17 +64,26 @@ drawframe(double ts) { double radians, radius; Point center; + Point wingpoints[6]; radians = fmod(ts / spr, spr) * RAD; - radius = imageradius(screen); + radius = imageradius(screen) * 1.4; center = imagecenter(screen); + wingpoints[0] = center; + wingpoints[5] = addpt(center, Pt(1, 1)); draw(screen, screen->r, bg, nil, SPt(0, 0)); for(int i = 0; i < wings; i++) { - line(screen, center, addpt(vecpt(radians, radius), center), Enddisc, Enddisc, 2, fg, Pt(0,0)); - radians += wingrads * 2; + wingpoints[1] = addpt(center, vecpt(radians + eccen, radius / 3)); + wingpoints[2] = addpt(center, vecpt(radians, radius)); + radians += wingrads; + wingpoints[3] = addpt(center, vecpt(radians, radius)); + wingpoints[4] = addpt(center, vecpt(radians + eccen, radius / 3)); + radians += wingrads; + + fillbezspline(screen, wingpoints, 6, ~0, fg, Pt(0, 0)); } } @@ -99,6 +110,7 @@ main(int argc, char* argv[]) frametime = 1.0 / 30.0 * 1000; wings = 3; spr = 2; + eccen = RAD / 6; ARGBEGIN{ case 'f': @@ -110,6 +122,9 @@ main(int argc, char* argv[]) case 'w': wings = atoi(EARGF(usage())); break; + case 'e': + eccen = DEG * atof(EARGF(usage())); + break; default: usage(); } ARGEND