using namespace std; #include #include #include #include #include typedef double coord; const double EPS = 1E-8; const int HIT_INTERSECTS = 1; const int LINE = 0; const int SEGMENT = 1; class point { public: coord x, y; point() { x = y = 0; } point(coord x1, coord y1) { x = x1; y = y1; } point operator +=(point a) { x += a.x; y += a.y; return *this; } point operator -=(point a) { x -= a.x; y -= a.y; return *this; } point operator *=(coord a) { x *= a; y *= a; return *this; } point operator /=(coord a) { x /= a; y /= a; return *this; } int operator ==(point a) { return x==a.x && y==a.y; } int operator !=(point a) { return x!=a.x || y!=a.y; } }; point operator *(coord x, point a) { return a *= x; } point operator *(point a, coord x) { return a *= x; } point operator /(point a, coord x) { return a /= x; } point operator +(point a, point b) { return a += b; } point operator -(point a, point b) { return a -= b; } coord operator *(point a, point b) { return a.x*b.x + a.y*b.y; } coord cross(point a, point b) { return a.x*b.y - a.y*b.x; } double length(point a) { return sqrt((double)(a*a)); } point perp(point a) { return point(-a.y,a.x); } class line { public: point p1, p2; line() { p1 = p2 = point(); } line(point q1, point q2) { p1 = q1; p2 = q2; } int operator ==(line a) { return (p1==a.p1 && p2==a.p2) || (p1==a.p2 && p2==a.p1); } }; double dist(point a, line b, int segment = 0) { point db = b.p2 - b.p1; if ( segment && ((b.p1-a)*db)*((b.p2-a)*db)>0 ) return min(length(b.p1-a),length(b.p2-a)); a -= db*((a-b.p1)*db)/(db*db); return length(b.p1 - a); } double dist(line a, line b) { double res; res = dist(a.p1,b,1); res eps ) return 0; if ( cross(db,a.p1-b.p1)*cross(db,a.p2-b.p1)/(db*db)>eps ) return 0; } return 1; } vector side[2]; const int maxcoord = 1000; const int minpoint = 3; const int maxpoint = 100; int main() { int nruns; scanf("%d\n",&nruns); for(int run=0; runmaxpoint ) { printf("#points = %d invalid\n",n); return -1; } side[s] = vector(n); for(int i=0; imaxcoord || abs(side[s][i].y)>maxcoord ) { printf("maxcoord too large\n"); return -1; } } } // Check for intersections of each polygon with itself: // (inter-polygon intersections will result in radius 0 tested below) for(int s=0; s<2; s++) { for(int i=0; i