#include <bits/stdc++.h>
const int MAX = 300010;
const int MOD = 998244353;
const int INF = 0x3f3f3f3f;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-4;
const long double PI = acosl(-1.0);
using namespace std;
bool eq(long double a, long double b) { return fabsl(a - b) <= EPS; }
struct point {
  long double x, y;
  int id;
  point(long double x = 0, long double y = 0) : x(x), y(y) {}
  point operator+(const point &o) const { return {x + o.x, y + o.y}; }
  point operator-(const point &o) const { return {x - o.x, y - o.y}; }
  point operator*(long double t) const { return {x * t, y * t}; }
  point operator/(long double t) const { return {x / t, y / t}; }
  bool operator<(const point &o) const {
    if (!eq(x, o.x)) return x < o.x;
    return y < o.y;
  }
  bool operator==(const point &o) const { return eq(x, o.x) and eq(y, o.y); }
};
struct line {
  point p1, p2;
  line(point p1 = 0, point p2 = 0) : p1(p1), p2(p2) {}
  long double a = p2.y - p1.y;
  long double b = p1.x - p2.x;
  long double c = p1.x * p2.y - p1.y * p2.x;
};
pair<long double, long double> inter(line p, line q) {
  long double base = p.a * q.b - p.b * q.a;
  if (fabs(base) < 1e-5) return pair<long double, long double>(1e9, 1e9);
  return pair<long double, long double>((p.b * q.c - q.b * p.c) / base,
                                        (p.c * q.a - q.c * p.a) / base);
}
long double func(line a, pair<long double, long double> b) {
  return a.a * b.first + a.b * b.second + a.c;
}
void half_plane_intersect(vector<line> &v, vector<point> &ret) {
  int n = v.size();
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      pair<long double, long double> crs = inter(v[i], v[j]);
      if (fabs(crs.first - 1e9) < EPS) continue;
      bool bad = 0;
      for (int k = 0; k < n; k++)
        if (func(v[k], crs) < -EPS) {
          bad = 1;
          break;
        }
      if (!bad) ret.push_back(point(crs.first, crs.second));
    }
  }
}
point rotccw(point p, long double a) {
  a = PI * a / 180;
  return point((p.x * cos(a) - p.y * sin(a)), (p.y * cos(a) + p.x * sin(a)));
}
long double cross(point a, point b) { return a.x * b.y - a.y * b.x; }
long double area(vector<point> &p) {
  long double ret = 0;
  for (int i = 2; i < (int)p.size(); i++)
    ret += cross(p[i] - p[0], p[i - 1] - p[0]);
  return fabsl(ret / 2);
}
int ccw(point &a, point &b, point e) {
  long double tmp = cross(b - a, e - a);
  return (tmp > EPS) - (tmp < -EPS);
}
vector<point> convex_hull(const vector<point> points) {
  vector<point> P(points);
  sort(P.begin(), P.end());
  vector<point> lower, upper;
  for (const auto &p : P) {
    int n = int(lower.size());
    while (n >= 2 and !ccw(lower[n - 2], lower[n - 1], p)) {
      lower.pop_back();
      n = int(lower.size());
    }
    lower.push_back(p);
  }
  reverse(P.begin(), P.end());
  for (const auto &p : P) {
    int n = int(upper.size());
    while (n >= 2 and !ccw(upper[n - 2], upper[n - 1], p)) {
      upper.pop_back();
      n = int(upper.size());
    }
    upper.push_back(p);
  }
  lower.pop_back();
  lower.insert(lower.end(), upper.begin(), upper.end() - 1);
  return lower;
}
int quarter(point a) {
  if (a.x >= 0 and a.y > 0) return 0;
  if (a.x < 0 and a.y >= 0) return 1;
  if (a.x <= 0 and a.y < 0) return 2;
  return 3;
}
bool comp(point a, point b) {
  int qa = quarter(a);
  int qb = quarter(b);
  if (qa == qb)
    return cross(a, b) > 0;
  else
    return qa < qb;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  vector<point> resp;
  vector<line> lines;
  long double w, h, ang;
  cin >> w >> h >> ang;
  point a = point(w / 2, h / 2);
  point b = point(-w / 2, h / 2);
  point c = point(-w / 2, -h / 2);
  point d = point(w / 2, -h / 2);
  lines.push_back(line(a, b));
  lines.push_back(line(b, c));
  lines.push_back(line(c, d));
  lines.push_back(line(d, a));
  a = rotccw(a, ang);
  b = rotccw(b, ang);
  c = rotccw(c, ang);
  d = rotccw(d, ang);
  lines.push_back(line(a, b));
  lines.push_back(line(b, c));
  lines.push_back(line(c, d));
  lines.push_back(line(d, a));
  half_plane_intersect(lines, resp);
  sort(resp.begin(), resp.end(), comp);
  cout << fixed << setprecision(10);
  cout << area(resp) << '\n';
  return 0;
}
