#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
struct Punto {
  long double x, y;
  Punto(long double X = 0, long double Y = 0) : x(X), y(Y) {}
};
long double w, h, a;
long double x, y, c, s, X, Y;
Punto P[2][5], MIN;
vector<Punto> Poly;
bool cmp(Punto a, Punto b) {
  long double day = a.y - MIN.y, dax = a.x - MIN.x;
  long double dby = b.y - MIN.y, dbx = b.x - MIN.x;
  long double angA =
                  atan2(day, dax) * 180.0 / 3.14159265358979323846264338327950,
              angB =
                  atan2(dby, dbx) * 180.0 / 3.14159265358979323846264338327950;
  return angA < angB;
}
int main() {
  cin >> w >> h >> a;
  if (a == 0 or a == 180) {
    cout.precision(10);
    cout << fixed << w * h << endl;
    return 0;
  }
  a = 3.14159265358979323846264338327950 / 180.0 * a;
  w /= 2.0, h /= 2.0;
  P[0][0] = Punto(w, h), P[0][1] = Punto(-w, h), P[0][2] = Punto(-w, -h),
  P[0][3] = Punto(w, -h), P[0][4] = P[0][0];
  for (int i = 0; i < 4; i++) {
    x = P[0][i].x, y = P[0][i].y;
    c = cos(a), s = sin(a);
    X = x * c - y * s, Y = x * s + y * c;
    P[1][i] = Punto(X, Y);
  }
  P[1][4] = P[1][0];
  for (int i = 0; i < 4; i++) {
    vector<Punto> aux;
    long double x1, x2, y1, y2;
    long double A1, A2, B1, B2, C1, C2;
    x1 = P[0][i].x, y1 = P[0][i].y;
    x2 = P[0][i + 1].x, y2 = P[0][i + 1].y;
    A1 = y2 - y1, B1 = x1 - x2, C1 = A1 * x1 + B1 * y1;
    for (int j = 0; j < 4; j++) {
      x1 = P[1][j].x, y1 = P[1][j].y;
      x2 = P[1][j + 1].x, y2 = P[1][j + 1].y;
      A2 = y2 - y1, B2 = x1 - x2, C2 = A2 * x1 + B2 * y1;
      bool interseca = true;
      long double det = A1 * B2 - A2 * B1;
      if (det) {
        x = (B2 * C1 - B1 * C2) / det;
        y = (A1 * C2 - A2 * C1) / det;
        interseca &= (x >= min(P[0][i].x, P[0][i + 1].x) - 1e-9 and
                      x <= max(P[0][i].x, P[0][i + 1].x) + 1e-9);
        interseca &= (y >= min(P[0][i].y, P[0][i + 1].y) - 1e-9 and
                      y <= max(P[0][i].y, P[0][i + 1].y) + 1e-9);
        interseca &= (x >= min(P[1][j].x, P[1][j + 1].x) - 1e-9 and
                      x <= max(P[1][j].x, P[1][j + 1].x) + 1e-9);
        interseca &= (y >= min(P[1][j].y, P[1][j + 1].y) - 1e-9 and
                      y <= max(P[1][j].y, P[1][j + 1].y) + 1e-9);
      } else
        interseca = false;
      if (interseca) Poly.push_back(Punto(x, y));
    }
  }
  MIN = Poly[0];
  for (int i = 1; i < (int)(Poly).size(); i++)
    if ((Poly[i].y < MIN.y) or (Poly[i].y == MIN.y and Poly[i].x < MIN.x))
      MIN = Poly[i];
  sort((Poly).begin(), (Poly).end(), cmp);
  Poly.push_back(Poly[0]);
  double res = 0;
  int n = (int)(Poly).size();
  for (int i = 0; i < n - 1; i++)
    res += Poly[i].x * Poly[i + 1].y - Poly[i + 1].x * Poly[i].y;
  res += Poly[n - 1].x * Poly[0].y - Poly[0].x * Poly[n - 1].y;
  res = abs(res / 2.0);
  cout.precision(10);
  cout << fixed << res << endl;
  return 0;
}
