#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-8;
struct Point {
  double x, y;
  Point(double _x = 0, double _y = 0) { x = _x, y = _y; }
};
struct Line {
  double a, b, c;
  Line(double _a, double _b, double _c) { a = _a, b = _b, c = _c; }
  double calc(double x, double y) { return a * x + b * y + c; }
};
Point rotate(Point p, double ang) {
  return Point(cos(ang) * p.x - sin(ang) * p.y,
               sin(ang) * p.x + cos(ang) * p.y);
}
Line get(Point s, Point t) {
  double a = t.y - s.y;
  double b = s.x - t.x;
  double c = -a * s.x - b * s.y;
  return Line(a, b, c);
}
Point intersect(Line l1, Line l2) {
  double d = l1.a * l2.b - l1.b * l2.a;
  return Point((l1.b * l2.c - l1.c * l2.b) / d,
               (l1.c * l2.a - l1.a * l2.c) / d);
}
void cut(vector<Point> &p, Point s, Point t) {
  Line l1 = get(s, t);
  vector<Point> q;
  int n = p.size();
  p.push_back(p[0]);
  for (int i = 0; i < n; ++i) {
    double z1 = l1.calc(p[i].x, p[i].y);
    if (z1 < eps) {
      q.push_back(p[i]);
    }
    double z2 = l1.calc(p[i + 1].x, p[i + 1].y);
    if (z1 < eps && z2 > eps || z1 > eps && z2 < eps) {
      Line l2 = get(p[i], p[i + 1]);
      q.push_back(intersect(l1, l2));
    }
  }
  swap(p, q);
}
int w, h, a;
vector<Point> vp;
int main() {
  scanf("%d%d%d", &w, &h, &a);
  double ang = a / 180.0 * PI;
  vp.push_back(rotate(Point(w, h), ang));
  vp.push_back(rotate(Point(-w, h), ang));
  vp.push_back(rotate(Point(-w, -h), ang));
  vp.push_back(rotate(Point(w, -h), ang));
  cut(vp, Point(w, h), Point(-w, h));
  cut(vp, Point(-w, h), Point(-w, -h));
  cut(vp, Point(-w, -h), Point(w, -h));
  cut(vp, Point(w, -h), Point(w, h));
  vp.push_back(vp[0]);
  double area = 0;
  for (int i = 0; i < (int)vp.size() - 1; ++i) {
    area += (vp[i].x - vp[i + 1].x) * (vp[i + 1].y + vp[i].y);
  }
  printf("%.10f\n", 0.125 * area);
  return 0;
}
