#include <bits/stdc++.h>
using namespace std;
long double EPS = 1e-12;
struct pt {
  long double x, y;
  pt(long double x, long double y) : x(x), y(y) {}
  pt operator+(const pt &first) const { return pt(x + first.x, y + first.y); }
  pt operator-(const pt &first) const { return pt(x - first.x, y - first.y); }
  pt operator*(long double c) const { return pt(x * c, y * c); }
  pt operator/(long double c) const { return pt(x / c, y / c); }
  bool operator==(const pt &first) const {
    return fabs(x - first.x) + fabs(y - first.y) < EPS;
  }
};
bool CONVEX;
long double dot(pt first, pt second) {
  return first.x * second.x + first.y * second.y;
}
long double cross(pt first, pt second) {
  return first.x * second.y - first.y * second.x;
}
long double dist2(pt first, pt second) {
  return dot(first - second, first - second);
}
long double dist(pt first, pt second) {
  return sqrt(dot(first - second, first - second));
}
bool clockwiseLL(pt a, pt b, pt c, pt d) { return cross(a - b, c - d) > 0; }
bool clockwisePPP(pt a, pt b, pt c) { return cross(a - c, a - b) > 0; }
pt intersectLL(pt a, pt b, pt c, pt d) {
  return a + (b - a) * (cross(c - a, c - d)) / (cross(b - a, c - d));
}
pt LINEA = pt(0, 0);
pt LINEB = pt(1, 2);
bool cmp4(pair<pt, pt> l, pair<pt, pt> m) {
  pt first = LINEA;
  pt second = LINEB;
  pt a = LINEA + l.second - l.first;
  pt b = LINEA + m.second - m.first;
  if (cross(a - first, a - second) * cross(b - first, b - second) >= 0) {
    if (cross(a - first, a - second) == 0 && dot(a - first, a - second) > 0)
      return true;
    if (cross(b - first, b - second) == 0 && dot(b - first, b - second) > 0)
      return false;
    return cross(b - first, a - first) < 0;
  }
  return cross(a - first, a - second) > 0;
}
long double areaG(vector<pt> g) {
  long double area = 0;
  for (int i = 0; i < g.size(); i++) {
    area += cross(g[i], g[(i + 1) % g.size()]);
  }
  return area / 2.0;
}
pt rotateP(pt first, long double t) {
  return pt(first.x * cos(t) - first.y * sin(t),
            first.x * sin(t) + first.y * cos(t));
}
vector<pt> rotateG(vector<pt> g, long double t) {
  vector<pt> h;
  for (int i = 0; i < g.size(); i++) {
    h.push_back(rotateP(g[i], t));
  }
  return h;
}
vector<pt> intersectionH(vector<pair<pt, pt> > v) {
  sort(v.begin(), v.end(), cmp4);
  CONVEX = true;
  vector<pair<pt, pt> > ans;
  vector<pt> pts;
  if (v.size() == 0) return pts;
  ans.push_back(v[0]);
  int ind = 1;
  while (v.size() > ind) {
    while (ans.size() > 1) {
      pair<pt, pt> a = v[ind];
      pair<pt, pt> b = ans[(long long)ans.size() - 2];
      pair<pt, pt> c = ans.back();
      if (!clockwiseLL(b.first, b.second, a.first, a.second) ||
          !clockwisePPP(intersectLL(b.first, b.second, c.first, c.second),
                        a.first, a.second))
        break;
      ans.pop_back();
    }
    ans.push_back(v[ind]);
    ind++;
  }
  LINEA = LINEA * -1;
  LINEB = LINEB * -1;
  v = ans;
  ans.clear();
  sort(v.begin(), v.end(), cmp4);
  ans.push_back(v[0]);
  ind = 1;
  while (v.size() > ind) {
    while (ans.size() > 1) {
      pair<pt, pt> a = v[ind];
      pair<pt, pt> b = ans[(long long)ans.size() - 2];
      pair<pt, pt> c = ans.back();
      if (!clockwiseLL(b.first, b.second, a.first, a.second) ||
          !clockwisePPP(intersectLL(b.first, b.second, c.first, c.second),
                        a.first, a.second))
        break;
      ans.pop_back();
    }
    ans.push_back(v[ind]);
    ind++;
  }
  LINEA = LINEA * -1;
  LINEB = LINEB * -1;
  for (int i = 0; i < ans.size(); i++) {
    pair<pt, pt> a = ans[i];
    pair<pt, pt> b = ans[(i + 1) % ans.size()];
    if (!clockwiseLL(a.first, a.second, b.first, b.second)) {
      CONVEX = false;
      cout << "Not convex!";
    }
    pts.push_back(intersectLL(a.first, a.second, b.first, b.second));
  }
  return pts;
}
vector<pt> intersectionGG(vector<pt> g, vector<pt> h) {
  vector<pair<pt, pt> > v;
  for (int i = 0; i < g.size(); i++) {
    v.push_back(make_pair(g[i], g[(i + 1) % g.size()]));
  }
  for (int i = 0; i < h.size(); i++) {
    v.push_back(make_pair(h[i], h[(i + 1) % h.size()]));
  }
  return intersectionH(v);
}
int main() {
  long double w, h, a;
  cin >> w >> h >> a;
  vector<pt> g;
  if (a == 0) a = 0.00000001;
  a = (a * atan(1)) / 45;
  g.push_back(pt(w / 2, h / 2));
  g.push_back(pt(-w / 2, h / 2));
  g.push_back(pt(-w / 2, -h / 2));
  g.push_back(pt(w / 2, -h / 2));
  cout << setprecision(10) << fixed;
  cout << areaG(intersectionGG(g, rotateG(g, a))) << endl;
}
