#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
const double EPS = 1e-10;
struct point {
  double x, y;
  void rot(double alfa) {
    alfa = alfa * PI / 180.0;
    double xx = x * cos(alfa) - y * sin(alfa);
    double yy = x * sin(alfa) + y * cos(alfa);
    x = xx;
    y = yy;
  }
  bool operator<(const point &p) const {
    return x < p.x - EPS || abs(x - p.x) < EPS && y < p.y - EPS;
  }
};
struct seg {
  point A, B;
  seg(){};
  seg(point p, point q) {
    A = p;
    B = q;
  }
};
struct line {
  double a, b, c;
  line(){};
  line(point A, point B) {
    a = A.y - B.y;
    b = B.x - A.x;
    c = -a * A.x - b * A.y;
    double z = sqrt(a * a + b * b);
    if (abs(z) > EPS) a /= z, b /= z, c /= z;
  }
  double dist(point p) { return a * p.x + b * p.y + c; }
};
int i, j, st[30], vf;
double w, h, alfa, rs;
seg a[30];
vector<point> v;
bool viz[30];
point O, A, B, C, D;
inline bool betw(double l, double r, double x) {
  return min(l, r) <= x + EPS && x <= max(l, r) + EPS;
}
inline bool intersect_1d(double a, double b, double c, double d) {
  if (a > b) swap(a, b);
  if (c > d) swap(c, d);
  return max(a, c) <= min(b, d) + EPS;
}
bool intersect(point a, point b, point c, point d) {
  if (!intersect_1d(a.x, b.x, c.x, d.x) || !intersect_1d(a.y, b.y, c.y, d.y))
    return 0;
  line m(a, b);
  line n(c, d);
  double zn = (m.a * n.b - m.b * n.a);
  if (abs(zn) < EPS) {
    if (abs(m.dist(c)) > EPS || abs(n.dist(a)) > EPS) return 0;
    if (b < a) swap(a, b);
    if (d < c) swap(c, d);
    O = max(a, c);
    return 1;
  } else {
    O.x = -(m.c * n.b - m.b * n.c) / zn;
    O.y = -(m.a * n.c - m.c * n.a) / zn;
    return betw(a.x, b.x, O.x) && betw(a.y, b.y, O.y) && betw(c.x, d.x, O.x) &&
           betw(c.y, d.y, O.y);
  }
}
double area(point a, point b, point c) {
  return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y);
}
bool cmp(point a, point b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> w >> h >> alfa;
  if (alfa == 180 || alfa == 0)
    return cout << setprecision(6) << fixed << w * h << '\n', 0;
  A.x = -w / 2;
  A.y = h / 2;
  B.x = w / 2;
  B.y = h / 2;
  C.x = w / 2;
  C.y = -h / 2;
  D.x = -w / 2;
  D.y = -h / 2;
  a[0] = seg(A, B);
  a[1] = seg(B, C);
  a[2] = seg(C, D);
  a[3] = seg(D, A);
  for (i = 0; i < 4; ++i) {
    a[i + 4] = a[i];
    a[i + 4].A.rot(alfa);
    a[i + 4].B.rot(alfa);
  }
  for (i = 0; i < 4; ++i)
    for (j = 4; j < 8; ++j)
      if (intersect(a[i].A, a[i].B, a[j].A, a[j].B)) v.push_back(O);
  sort(v.begin(), v.end(), cmp);
  st[1] = 0;
  st[2] = 1;
  viz[1] = 1;
  vf = 2;
  for (i = j = 1; i >= 0; i += j) {
    if (!viz[i]) {
      while (vf > 1 && area(v[st[vf - 1]], v[st[vf]], v[i]) < EPS)
        viz[st[vf--]] = 0;
      st[++vf] = i;
      viz[i] = 1;
    }
    if (i == v.size() - 1) j = -1;
  }
  for (i = 1, st[vf] = st[1]; i < vf; ++i)
    rs += v[st[i]].x * v[st[i + 1]].y - v[st[i + 1]].x * v[st[i]].y;
  cout << setprecision(7) << fixed << abs(rs) / 2 << '\n';
  return 0;
}
