#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;
}
