#include #include #include using namespace std; struct point { double x; double y; }; struct square { point o; point a, b, c, d; int is; }sq[10500]; int n, q, br=0; bool cross (point &a, point &b, point &c) { return (a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x) < 0; } bool in_tr(point &s, point &a, point &b, point &c) { bool b1, b2, b3; b1 = cross(s, a, b); b2 = cross(s, b, c); b3 = cross(s, c, a); return ((b1 == b2) && (b2 == b3)); } bool inside(point &p, square &s) { return in_tr(p, s.a, s.b, s.c) || in_tr(p, s.a, s.c, s.d); } bool inter(square &s, square &t) { return (inside(s.a, t) || inside(s.b, t) || inside(s.d, t) || inside(s.d, t) || inside(t.a, s) || inside(t.b, s) || inside(t.c, s) || inside(t.d, s)); } void rot(point &p, point &o, double rad) { p.x = cos(rad) * (p.x-o.x) - sin(rad) * (p.y-o.y) + o.x; p.y = sin(rad) * (p.x-o.x) + cos(rad) * (p.y-o.y) + o.y; } void print() { printf("%d\n", br); } void r(int id, double rad) { rot(sq[id].a, sq[id].o, rad); rot(sq[id].b, sq[id].o, rad); rot(sq[id].c, sq[id].o, rad); rot(sq[id].d, sq[id].o, rad); br-=sq[id].is; sq[id].is = 0; for(int i=0; i