~aleteoryx/9c

2a08c37c3db23b27b963442fe273097915bc30ea — glenda 37 years ago 16b2039
spirals!
2 files changed, 23 insertions(+), 4 deletions(-)

A .plan
M spiral.c
A .plan => .plan +4 -0
@@ 0,0 1,4 @@
TODO for spirals.c:
 * maybe fix screen tearing
 * generate a proper spiral
 * make the center a little less ugly

M spiral.c => spiral.c +19 -4
@@ 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