#include <bits/stdc++.h>
using namespace std;
const double PI = 3.1415926535897932384626433832795;
const double EPS = 1E-9;
struct pt {
  long double x, y;
  pt(long double X = 0.0, long double Y = 0.0) {
    x = X;
    y = Y;
  }
  bool operator<(const pt &p) const {
    return x < p.x - EPS || abs(x - p.x) < EPS && y < p.y - EPS;
  }
  pt operator-(const pt &p) { return pt(x - p.x, y - p.y); }
  long double operator%(const pt &p) { return x * p.y - y * p.x; }
};
struct line {
  long double a, b, c;
  line() {}
  line(pt p, pt q) {
    a = p.y - q.y;
    b = q.x - p.x;
    c = -a * p.x - b * p.y;
    norm();
  }
  void norm() {
    long double z = sqrt(a * a + b * b);
    if (abs(z) > EPS) a /= z, b /= z, c /= z;
  }
  long double dist(pt p) const { return a * p.x + b * p.y + c; }
};
inline bool betw(long double l, long double r, long double x) {
  return min(l, r) <= x + EPS && x <= max(l, r) + EPS;
}
inline bool intersect_1d(long double a, long double b, long double c,
                         long double d) {
  if (a > b) swap(a, b);
  if (c > d) swap(c, d);
  return max(a, c) <= min(b, d) + EPS;
}
bool intersect(pt a, pt b, pt c, pt d, pt &left, pt &right) {
  if (!intersect_1d(a.x, b.x, c.x, d.x) || !intersect_1d(a.y, b.y, c.y, d.y))
    return false;
  line m(a, b);
  line n(c, d);
  long 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 false;
    if (b < a) swap(a, b);
    if (d < c) swap(c, d);
    left = max(a, c);
    right = min(b, d);
    return true;
  } else {
    left.x = right.x = -(m.c * n.b - m.b * n.c) / zn;
    left.y = right.y = -(m.a * n.c - m.c * n.a) / zn;
    return betw(a.x, b.x, left.x) && betw(a.y, b.y, left.y) &&
           betw(c.x, d.x, left.x) && betw(c.y, d.y, left.y);
  }
}
int main() {
  int w, h, a;
  cin >> w >> h >> a;
  long double W = w, H = h, A = a;
  if (a == 0 || a == 180) {
    printf("%1.10lf\n", (double)(W * H));
    return 0;
  } else if (a == 90) {
    printf("%1.10lf\n", (double)(min(W, H) * min(W, H)));
    return 0;
  }
  A = (A / 360.0) * 2.0 * PI;
  vector<pt> R1(4), R2(4);
  R1[0] = pt(H / 2.0, W / 2.0);
  R1[1] = pt(-H / 2.0, W / 2.0);
  R1[2] = pt(-H / 2.0, -W / 2.0);
  R1[3] = pt(H / 2.0, -W / 2.0);
  for (int i = 0; i < 4; i++) {
    R2[i] = pt(R1[i].x * cos(A) - R1[i].y * sin(A),
               R1[i].x * sin(A) + R1[i].y * cos(A));
  }
  vector<pt> Z;
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      pt a1 = R2[i];
      pt a2 = R2[(i + 1) % 4];
      pt b1 = R1[j];
      pt b2 = R1[(j + 1) % 4];
      pt c1, c2;
      if (intersect(a1, a2, b1, b2, c1, c2)) Z.push_back(c1);
    }
  }
  vector<pair<long double, pt> > Z2;
  for (int i = 0; i < Z.size(); i++)
    Z2.push_back(make_pair(atan2(Z[i].y, Z[i].x), Z[i]));
  sort(Z2.begin(), Z2.end());
  long double res = 0.0;
  for (int i = 0; i < Z2.size() - 2; i++) {
    pt a1, a2, a3;
    a1 = Z2[0].second;
    a2 = Z2[i + 1].second;
    a3 = Z2[i + 2].second;
    long double curr = (a1 - a2) % (a1 - a3);
    curr = abs(curr) / 2.0;
    res += curr;
  }
  printf("%1.10lf\n", (double)res);
  return 0;
}
