#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-8;
struct vec {
  double x, y, val;
  vec(double _x = 0, double _y = 0, double v = 0) : x(_x), y(_y), val(v) {}
  bool in(double px, double py) { return x * px + y * py <= val + eps; }
} a[8];
bool cmp(const vec& a, const vec& b) {
  return atan2(a.y, a.x) < atan2(b.y, b.x);
}
double cross(vec a, vec b) { return a.x * b.y - a.y * b.x; }
vector<vec> pts;
vec get_point(vec a, vec b) {
  if (a.x == 1 || a.x == -1) {
    double x = a.val / a.x, y = (b.val - x * b.x) / b.y;
    return vec(x, y);
  } else {
    double y = a.val / a.y, x = (b.val - y * b.y) / b.x;
    return vec(x, y);
  }
}
int main() {
  int w, h, alpha;
  cin >> w >> h >> alpha;
  if (alpha == 0 || alpha == 180) {
    cout << 1ll * w * h << endl;
    return 0;
  }
  double c = cos(alpha * pi / 180.0);
  double s = sin(alpha * pi / 180.0);
  a[0] = vec(1, 0, w);
  a[1] = vec(0, 1, h);
  a[2] = vec(-1, 0, w);
  a[3] = vec(0, -1, h);
  a[4] = vec(c, s, w);
  a[5] = vec(-s, c, h);
  a[6] = vec(-c, -s, w);
  a[7] = vec(s, -c, h);
  for (int i = 0; i < 4; ++i) {
    for (int j = 4; j < 8; ++j) {
      vec p = get_point(a[i], a[j]);
      bool flag = true;
      for (int k = 0; k < 8; ++k)
        if (!a[k].in(p.x, p.y)) flag = false;
      if (flag) pts.push_back(p);
    }
  }
  sort(pts.begin(), pts.end(), cmp);
  double area = 0;
  int sz = pts.size();
  for (size_t k = 0; k < sz; ++k) {
    area += cross(pts[k], pts[(k + 1) % sz]);
  }
  area = fabs(area) / 8.0;
  printf("%.9f\n", area);
}
