|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T l
Length: 1284 (0x504)
Types: TextFile
Names: »lines.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/X/Roids/lines.c«
/* lines.c -- paint a bunch of lines with minimal requests. */
/* %%% Too lazy to compress these; maybe I'll do it later. */
#include "roids.h"
void BeginLines() {}
void AddLine(fromx, fromy, tox, toy, gc)
int fromx, fromy, tox, toy;
GC gc;
{
XDrawLine(dpy, gamewindow, gc, fromx, fromy, tox, toy);
}
void EndLines() {}
#define BETWEEN(x, a, b) ((a <= b && x >= a && x <= b) || \
(a > b && x <= a && x >= b))
Boolean CheckIntersects(ax, ay, bx, by, cx, cy, dx, dy)
int ax, ay, bx, by, cx, cy, dx, dy;
{
float m1, m2, b1, b2, x, y;
if (bx == ax) {
if (dx == cx) return FALSE; /* Parallel; hacking, assume they miss. */
m2 = ((float) (dy - cy)) / ((float) (dx - cx));
b2 = cy - cx*m2;
x = ax;
y = m2 * x + b2;
return (BETWEEN(y, ay, by) && BETWEEN(x, cx, dx) &&
BETWEEN(y, cy, dy));
}
if (dx == cx) {
return CheckIntersects(cx, cy, dx, dy, ax, ay, bx, by);
}
m1 = ((float) (by - ay)) / ((float) (bx - ax));
m2 = ((float) (dy - cy)) / ((float) (dx - cx));
b1 = ay - ax*m1;
b2 = cy - cx*m2;
if (m1 == m2) { /* Parallel lines */
return FALSE; /* Hack. */
}
x = (b2 - b1) / (m1 - m2);
y = m1 * x + b1;
return (BETWEEN(x, ax, bx) && BETWEEN(y, ay, by) &&
BETWEEN(x, cx, dx) && BETWEEN(y, cy, dy));
}