#include <bits/stdc++.h>   using namespace std;   struct Tpoint {     double x, y;   } v[200], pg[200];   struct Tline {     Tpoint a, b;   } ls[200];   int n, tot, q[200], ord[200];   double at2[200];   double getdouble() {     double d = 0, d2, d3;     char ch =    ;     bool flag = false;     while (!isdigit(ch = getchar()))       if (ch ==  - ) break;     if (ch ==  - )       flag = 1;     else       d = ch - 48;     while (isdigit(ch = getchar())) d = d * 10 + ch - 48;     if (ch ==  - ) {       d2 = 0;       d3 = 1;       while (isdigit(ch = getchar())) d2 = d2 * 10 + ch - 48, d3 /= 10;       d += d2 * d3;     }     if (flag)       return -d;     else       return d;   }   void init() {     int i, w, h;     double angle;     n = 4;     scanf( %d%d%lf , &w, &h, &angle);     v[1].x = (double)w / 2;     v[1].y = -(double)h / 2;     v[2].x = (double)w / 2;     v[2].y = (double)h / 2;     v[3].x = -(double)w / 2;     v[3].y = (double)h / 2;     v[4].x = -(double)w / 2;     v[4].y = -(double)h / 2;     for (int i = 1; i < n; i++) ls[i].a = v[i], ls[i].b = v[i + 1];     ls[n].a = v[n];     ls[n].b = v[1];     angle = angle * 3.1415926535897932384626433832795 / 180;     for (i = 1; i <= 4; i++) {       v[i + n].x = v[i].x * cos(angle) - v[i].y * sin(angle);       v[i + n].y = v[i].x * sin(angle) + v[i].y * cos(angle);     }     for (int i = 1; i < n; i++)       ls[n + i].a = v[n + i], ls[n + i].b = v[n + i + 1];     ls[n + n].a = v[n + n];     ls[n + n].b = v[n + 1];     n = n + n;   }   int sig(double d) { return d < -1e-8 ? -1 : d > 1e-8; }   double multi(Tpoint p0, Tpoint p1, Tpoint p2) {     return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);   }   int cmp(const void *a, const void *b) {     int p1 = *(int *)a, p2 = *(int *)b;     if (sig(at2[p1] - at2[p2]) == 0) {       return -sig(multi(ls[p2].a, ls[p2].b, ls[p1].b));     } else       return sig(at2[p2] - at2[p1]);   }   Tpoint ispoint(Tline l1, Tline l2) {     double dot1, dot2;     Tpoint I;     dot1 = multi(l2.a, l1.b, l1.a);     dot2 = multi(l1.b, l2.b, l1.a);     I.x = (l2.a.x * dot2 + l2.b.x * dot1) / (dot1 + dot2);     I.y = (l2.a.y * dot2 + l2.b.y * dot1) / (dot1 + dot2);     return I;   }   bool judgein(int x, int y, int z) {     Tpoint pnt = ispoint(ls[x], ls[y]);     return sig(multi(ls[z].a, ls[z].b, pnt)) < 0;   }   void halfplane() {     int i, tmp, front, rear;     for (i = 1; i <= n; i++) {       at2[i] = atan2(ls[i].b.y - ls[i].a.y, ls[i].b.x - ls[i].a.x);       ord[i] = i;     }     qsort(ord + 1, n, sizeof(int), cmp);     for (i = 2, tmp = 1; i <= n; i++) {       if (sig(at2[ord[i]] - at2[ord[i - 1]]) != 0) ord[++tmp] = ord[i];     }     front = 1;     rear = 2;     q[1] = ord[1];     q[2] = ord[2];     for (i = 3; i <= tmp; i++) {       while (front < rear && judgein(q[rear - 1], q[rear], ord[i])) rear--;       while (front < rear && judgein(q[front + 1], q[front], ord[i])) front++;       q[++rear] = ord[i];     }     while (front < rear && judgein(q[rear - 1], q[rear], q[front])) rear--;     while (front < rear && judgein(q[front + 1], q[front], q[rear])) front++;     q[--front] = q[rear];     tot = 0;     for (i = front + 1; i <= rear; i++) {       pg[++tot] = ispoint(ls[q[i - 1]], ls[q[i]]);     }   }   void work() {     halfplane();     int i;     double ans = 0;     for (i = 1; i < tot; i++) {       ans += multi(pg[1], pg[i], pg[i + 1]);     }     ans += multi(pg[1], pg[tot], pg[1]);     ans /= 2;     if (fabs(ans) > 0)       printf( %.8lf , fabs(ans));     else       printf( 0.0 );   }   int main() {     init();     work();     return 0;   }