#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-9;
const long long int mod = 1e9 + 7;
const long long int inf = 1LL << 30;
const int MAXN = 1e5 + 5;
struct point {
  double x, y;
  point() {}
  point(double x, double y) : x(x), y(y) {}
  point operator+(const point &p) { return point(x + p.x, y + p.y); }
  point operator-(const point &p) { return point(x - p.x, y - p.y); }
  point operator*(const double &s) { return point(x * s, y * s); }
  point operator/(const double &s) { return point(x / s, y / s); }
  bool operator<(const point &p) const {
    return x < p.x - eps || (abs(x - p.x) < eps && y < p.y - eps);
  }
  bool operator==(const point &p) const {
    return fabs(x - p.x) < eps && fabs(y - p.y) < eps;
  }
  double cross(const point &p) { return x * p.y - p.x * y; }
  double cross(const point &a, const point &b) {
    return (*this - a).cross(*this - b);
  }
};
bool intersect_segments(point a, point b, point c, point d, point &intersect) {
  point origin(0, 0);
  double d1 = origin.cross(a - b, d - c), d2 = origin.cross(a - c, d - c),
         d3 = origin.cross(a - b, a - c);
  if (fabs(d1) < eps) return false;
  double t1 = d2 / d1, t2 = d3 / d1;
  intersect = a + (b - a) * t1;
  if (t2 < -eps || t2 > 1 + eps) return false;
  return true;
}
pair<vector<point>, vector<point>> polygon_cut(vector<point> &p, point A,
                                               point B) {
  vector<point> left, right;
  point inter;
  point seg = B - A;
  for (int i = 0; i < ((int)p.size()); i++) {
    point cur = p[i], nxt = p[(i + 1) % ((int)p.size())];
    point v = cur - A;
    if (seg.cross(v) >= 0) left.push_back(cur);
    if (seg.cross(v) <= 0) right.push_back(cur);
    if (intersect_segments(A, B, cur, nxt, inter))
      right.push_back(inter), left.push_back(inter);
  }
  return make_pair(left, right);
}
double polygon_area(vector<point> &p) {
  if (((int)p.size()) < 3) return 0;
  point origin(0, 0);
  int n = ((int)p.size());
  p.push_back(p[0]);
  double area = 0;
  for (int i = 0; i < n; i++) area += origin.cross(p[i], p[i + 1]);
  p.pop_back();
  return fabs(area / 2.0);
}
point rot(point p, double a) {
  return point(p.x * cos(a) + p.y * sin(a), p.y * cos(a) - p.x * sin(a));
}
void cp() {
  double w, h, a;
  cin >> w >> h >> a;
  a = a * PI / 180;
  vector<point> p = {point(w / 2, h / 2), point(-w / 2, h / 2),
                     point(-w / 2, -h / 2), point(w / 2, -h / 2)};
  vector<point> q;
  for (point c : p) q.push_back(rot(c, a));
  for (int i = 0; i < 4; i++) q = polygon_cut(q, p[i], p[(i + 1) % 4]).first;
  double area = polygon_area(q);
  cout << setprecision(15) << fixed;
  ;
  cout << area << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int t;
  t = 1;
  while (t--) {
    cp();
  }
  return 0;
}
