/* * xline.c * (c) Neil Gershenfeld 2/4/03 * demonstrates drawing X lines by animating sin(k*x)/k*x */ #include #include #include Display *D; int S,Loop,Point; Window W; GC Gc,GcRev; XEvent Event; XPoint PointBuf[1000],OldPointBuf[1000]; float r; #define NPTS 500 #define WIDTH NPTS #define HEIGHT NPTS main() { D = XOpenDisplay(""); S = DefaultScreen(D); W = XCreateSimpleWindow(D, DefaultRootWindow(D), 0, 0, WIDTH,HEIGHT, 1, WhitePixel(D,S), WhitePixel(D,S)); XStoreName(D, W, "xline output"); XMapRaised(D, W); Gc = XCreateGC (D, W, 0L, (XGCValues *) 0); XSetForeground(D, Gc, BlackPixel(D, S)); XSetBackground(D, Gc, WhitePixel(D, S)); XSetLineAttributes(D, Gc, 0, LineSolid, CapButt, JoinMiter); GcRev = XCreateGC (D, W, 0L, (XGCValues *) 0); XSetForeground(D, GcRev, WhitePixel(D, S)); XSetBackground(D, GcRev, BlackPixel(D, S)); XSetLineAttributes(D, GcRev, 0, LineSolid, CapButt, JoinMiter); for (Loop = 1; Loop <= NPTS; ++Loop) { for (Point = 0; Point < NPTS; ++Point) { r = 0.1 * (2.0*Point + 1.0 - NPTS)/NPTS; OldPointBuf[Point].x = PointBuf[Point].x; OldPointBuf[Point].y = PointBuf[Point].y; PointBuf[Point].x = Point; PointBuf[Point].y = (int) (NPTS * (1.0 - sin(Loop*r) / (Loop*r)) / 2.0); } XDrawLines(D, W, GcRev, OldPointBuf, NPTS, CoordModeOrigin); XDrawLines(D, W, Gc, PointBuf, NPTS, CoordModeOrigin); XFlush(D); usleep(10000); } }