/* This software may only be used by you under license from AT&T Corp. ("AT&T"). A copy of AT&T's Source Code Agreement is available at AT&T's Internet website having the URL: If you received this software without first entering into a license with AT&T, you have an infringing copy of this software and cannot use it without violating AT&T's intellectual property rights. */ #pragma prototyped #include "geometry.h" #include Point origin = {0,0}; double xmin, xmax, ymin, ymax; /* min and max x and y values of sites */ double deltax, /* xmax - xmin */ deltay; /* ymax - ymin */ int nsites; int sqrt_nsites; void geominit() { double sn; sn = nsites+4; sqrt_nsites = (int)sqrt(sn); /* deltay = ymax - ymin; */ /* deltax = xmax - xmin; */ } double dist_2 ( Point* pp, Point* qp) { double dx = pp->x - qp->x; double dy = pp->y - qp->y; return (dx*dx + dy*dy); } void subPt (Point* a, Point b, Point c) { a->x = b.x - c.x; a->y = b.y - c.y; } void addPt (Point* c, Point a, Point b) { c->x = a.x + b.x; c->y = a.y + b.y; } double area_2(Point a, Point b, Point c ) { return (a.x * b.y - a.y * b.x + a.y * c.x - a.x * c.y + b.x * c.y - c.x * b.y); } int leftOf(Point a, Point b, Point c) { return (area_2( a, b, c ) > 0); } int intersection( Point a, Point b, Point c, Point d, Point* p ) { double s, t; /* The two parameters of the parametric eqns. */ double denom; /* Denominator of solutions. */ denom = a.x * ( d.y - c.y ) + b.x * ( c.y - d.y ) + d.x * ( b.y - a.y ) + c.x * ( a.y - b.y ); /* If denom is zero, then the line segments are parallel. */ /* In this case, return false even though the segments might overlap. */ if (denom == 0.0) return 0; s = ( a.x * ( d.y - c.y ) + c.x * ( a.y - d.y ) + d.x * ( c.y - a.y ) ) / denom; t = -( a.x * ( c.y - b.y ) + b.x * ( a.y - c.y ) + c.x * ( b.y - a.y ) ) / denom; p->x = a.x + s * ( b.x - a.x ); p->y = a.y + s * ( b.y - a.y ); if ((0.0 <= s) && (s <= 1.0) && (0.0 <= t) && (t <= 1.0)) return 1; else return 0; }