func_code_string: #include <bits/stdc++.h>   using namespace std;   const double Pi = acos(-1.0);   inline int cmp(double x, double y = 0, double tol = 1e-8) {     return (x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1;   }   struct point {     double x, y;     point(double x = 0, double y = 0) : x(x), y(y) {}     point operator+(point q) { return point(x + q.x, y + q.y); }     point operator-(point q) { return point(x - q.x, y - q.y); }     point operator*(double t) { return point(x * t, y * t); }     point operator/(double t) { return point(x / t, y / t); }     double operator*(point q) { return x * q.x + y * q.y; }     double operator%(point q) { return x * q.y - y * q.x; }     double mod() { return sqrt(x * x + y * y); }     point rotate(double t) {       return point(x * cos(t) - y * sin(t), x * sin(t) + y * cos(t));     }     int cmp(point q) const {       if (int t = ::cmp(x, q.x)) return t;       return ::cmp(y, q.y);     }     bool operator==(point q) const { return cmp(q) == 0; }     bool operator!=(point q) const { return cmp(q) != 0; }     bool operator<(point q) const { return cmp(q) < 0; }     static point pivot;   };   point point::pivot;   double poly_area(vector<point>& T) {     double s = 0;     int n = T.size();     for (int i = 0; i < n; i++) s += T[i] % T[(i + 1) % n];     return s / 2;   }   point line_intersect(point p, point q, point r, point s) {     point a = q - p, b = s - r, c = point(p % q, r % s);     return point(point(a.x, b.x) % c, point(a.y, b.y) % c) / (a % b);   }   vector<point> halfplane(vector<point>& p, pair<point, point> semiplano) {     vector<point> q;     point p1 = semiplano.first, p2 = semiplano.second;     int n = p.size();     for (int i = 0; i < n; i++) {       double c = (p2 - p1) % (p[i] - p1);       double d = (p2 - p1) % (p[(i + 1) % n] - p1);       if (cmp(c) >= 0) q.push_back(p[i]);       if (cmp(c * d) < 0)         q.push_back(line_intersect(p1, p2, p[i], p[(i + 1) % n]));     }     return q;   }   vector<point> semi_plano_cruzado(vector<pair<point, point> > semiplano) {     vector<point> p;     p.push_back(point(-1e9, -1e9));     p.push_back(point(-1e9, +1e9));     p.push_back(point(+1e9, +1e9));     p.push_back(point(+1e9, -1e9));     int n = semiplano.size();     for (int i = 0; i < n; i++) {       p = halfplane(p, semiplano[i]);       if (p.size() == 0) break;     }     return p;   }   int main() {     double w, h, a;     cin >> w >> h >> a;     double gama = atan(w / h);     double beta = atan(h / w);     vector<point> p, q;     p.push_back(point(-0.5 * w, -0.5 * h));     p.push_back(point(-0.5 * w, 0.5 * h));     p.push_back(point(0.5 * w, 0.5 * h));     p.push_back(point(0.5 * w, -0.5 * h));     a = a * Pi / 180;     double teta = 0.5 * Pi + a - gama - beta;     q.push_back(point(-0.5 * w, -0.5 * h));     q.push_back(point(-0.5 * w, 0.5 * h));     q.push_back(point(0.5 * w, 0.5 * h));     q.push_back(point(0.5 * w, -0.5 * h));     for (int i = 0; i < 4; i++) q[i] = q[i].rotate(teta);     for (int i = 0; i < 4; i++) {       p = halfplane(p, make_pair(q[(i + 1) % 4], q[i]));     }     printf( %.9lf n , fabs(poly_area(p)));     return 0;   }   