func_code_string: #include <bits/stdc++.h>   using namespace std;   const double PI = 2 * acos(0.0);   const double eps = 1e-9;   double toRad(int angle) { return PI * angle / 180.0; }   int a, w, h;   double angle;   complex<double> intersect(complex<double> p1, complex<double> p2,                             complex<double> p3, complex<double> p4) {     complex<double> ret;     double u = (p4.real() - p3.real()) * (p1.imag() - p3.imag()) -                (p4.imag() - p3.imag()) * (p1.real() - p3.real());     u /= (p4.imag() - p3.imag()) * (p2.real() - p1.real()) -          (p4.real() - p3.real()) * (p2.imag() - p1.imag());     return complex<double>(p1.real() + u * (p2.real() - p1.real()),                            p1.imag() + u * (p2.imag() - p1.imag()));   }   complex<double> rotate(complex<double> p, double angle) {     return complex<double>(p.real() * cos(angle) - p.imag() * sin(angle),                            p.real() * sin(angle) + p.imag() * cos(angle));   }   double dist(complex<double> a, complex<double> b) {     return (hypot((a - b).real(), (a - b).imag()));   }   int main() {     cin >> w >> h >> a;     long double ans = 0;     if (a > 90) a = 180 - a;     if (a == 0)       ans = 1.0 * w * h;     else if (a == 90)       ans = min(w, h) * min(w, h);     else {       angle = toRad(a);       if (w < h) swap(w, h);       complex<double> A(-0.5 * w, 0.5 * h);       complex<double> B(0.5 * w, 0.5 * h);       complex<double> C(0.5 * w, -0.5 * h);       complex<double> D(-0.5 * w, -0.5 * h);       complex<double> E = rotate(A, angle), F = rotate(B, angle),                       G = rotate(C, angle), H = rotate(D, angle);       complex<double> N = intersect(A, B, E, F);       complex<double> M = intersect(A, D, E, F);       complex<double> O = intersect(A, B, F, G);       complex<double> P = intersect(B, C, F, G);       ans = 1.0 * w * h;       if (G.imag() < B.imag()) {         long double area = dist(A, M) * dist(A, N) + dist(B, O) * dist(B, P);         ans -= area;       } else {         N = intersect(A, B, H, G);         M = intersect(C, D, H, G);         complex<double> K(N.real(), M.imag());         ans -= 2.0 * h * dist(C, K);         ans -= dist(K, M) * dist(N, K);       }     }     cout << fixed << setprecision(10) << ans << endl;     return 0;   }   