#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 101;
const double eps = 1e-9;
const double pi = acos(-1.0);
double w, h, a;
template <class T>
T Abs(T x) {
  return x < 0 ? -x : x;
}
double sgn(double x) { return fabs(x) < eps ? 0 : (x < eps ? -1 : 1); }
class node {
 public:
  double x, y;
  node(double _x = 0, double _y = 0) { x = _x, y = _y; }
  node(const node &A) {
    x = A.x;
    y = A.y;
  }
  node &operator=(const node &A) {
    x = A.x;
    y = A.y;
    return (*this);
  }
};
struct seg {
  node s, t;
  seg() {}
  seg(const node &s_, const node &t_) : s(s_), t(t_) {}
};
double Cross(node a, node b, node c) {
  return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
}
double Area(node a, node b, node c) {
  return 0.5 * Abs((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x));
}
double Len(node a, node b) {
  return sqrt(eps + (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double Len(node a) { return sqrt(eps + a.x * a.x + a.y * a.y); }
node its(seg a, seg b) {
  double s1 = Area(b.s, b.t, a.s), s2 = Area(b.s, b.t, a.t);
  return node((a.s.x * s2 + a.t.x * s1) / (s1 + s2),
              (a.s.y * s2 + a.t.y * s1) / (s1 + s2));
}
bool sct(node a1, node a2, node b1, node b2) {
  if (sgn(Cross(a1, b1, b2)) == 0 && sgn(Cross(a2, b1, b2)) == 0) {
    if (Abs(Abs(Len(a1, b1) - Len(a2, b2)) - (Len(a1, a2) + Len(b1, b2))) < eps)
      return false;
    if (Abs(Abs(Len(a1, b2) - Len(a2, b1)) - (Len(a1, a2) + Len(b1, b2))) < eps)
      return false;
    return true;
  }
  if (sgn(Cross(a1, b1, b2) * Cross(a2, b1, b2)) > 0) return false;
  if (sgn(Cross(b1, a1, a2) * Cross(b2, a1, a2)) > 0) return false;
  return true;
}
node Rotate(node a, double angle) {
  return node(a.x * cos(angle) - a.y * sin(angle),
              a.x * sin(angle) + a.y * cos(angle));
}
node wc[MAX_N], pp[MAX_N], p[5], q[5];
int x, n, m;
bool cmp(node a, node b) { return atan2(a.y, a.x) > atan2(b.y, b.x); }
void solve() {
  if (a == 0 || a == 180) {
    printf("%.9lf\n", w * h);
    return;
  }
  w /= 2, h /= 2;
  q[0] = node(w, h);
  q[1] = node(-w, h);
  q[2] = node(-w, -h);
  q[3] = node(w, -h);
  double rad = pi * a / 180;
  for (int i = 0; i < 4; ++i) p[i] = Rotate(q[i], rad);
  int n = 0;
  for (int i = 0; i < 4; ++i) {
    int j = (i + 1) % 4;
    for (int k = 0; k < 4; ++k) {
      if (sct(p[i], p[j], q[k], q[(k + 1) % 4])) {
        seg l1(p[i], p[j]), l2(q[k], q[(k + 1) % 4]);
        wc[++n] = its(l1, l2);
      }
    }
  }
  int m = 0;
  for (int i = 1; i <= n; ++i) {
    bool update = false;
    for (int j = 1; j < i; ++j) {
      if (sgn(wc[i].x - wc[j].x) == 0 && sgn(wc[i].y - wc[j].y) == 0)
        update = true;
    }
    if (!update) pp[++m] = wc[i];
  }
  if (0 == m) {
    printf("%.9lf\n", w * h * 4);
    return;
  }
  sort(pp + 1, pp + m + 1, cmp);
  pp[0] = node(0.0, 0.0);
  double area = 0;
  for (int i = 1; i <= m; ++i) {
    int j = (i + 1) % (m + 1);
    if (0 == j) ++j;
    area += Abs(Area(pp[i], pp[j], pp[0]));
  }
  printf("%.9lf\n", area);
}
int main() {
  scanf("%lf%lf%lf", &w, &h, &a);
  solve();
  return 0;
}
