@@ 4,6 4,7 @@
#include <event.h>
#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