#include <bits/stdc++.h>
using namespace std;
int sgn(double x) { return x < -1e-8 ? -1 : x > 1e-8; }
const double pi = acos(-1);
struct point {
  double x, y;
  point() {}
  point(double _x, double _y) : x(_x), y(_y) {}
  void write() { printf("%.4lf %.4lf\n", x, y); }
  bool operator<(const point& p) const {
    return sgn(atan2(y, x) - atan2(p.y, p.x)) < 0;
  }
  bool operator==(const point& p) const {
    return sgn(x - p.x) == 0 && sgn(y - p.y) == 0;
  }
  point operator+(const point& p) const { return point(x + p.x, y + p.y); }
  point operator-(const point& p) const { return point(x - p.x, y - p.y); }
  point operator*(double k) const { return point(x * k, y * k); }
};
double dot(const point& u, const point& v) { return u.x * v.x + u.y * v.y; }
double cross(const point& u, const point& v) { return u.x * v.y - v.x * u.y; }
double dist(const point& p1, const point& p2) {
  return sqrt(double(dot(p1 - p2, p1 - p2)));
}
bool seg_inter(const point& p1, const point& p2, const point& p3,
               const point& p4) {
  return min(p1.x, p2.x) <= max(p3.x, p4.x) &&
         min(p3.x, p4.x) <= max(p1.x, p2.x) &&
         min(p1.y, p2.y) <= max(p3.y, p4.y) &&
         min(p3.y, p4.y) <= max(p1.y, p2.y) &&
         sgn(cross(p2 - p1, p3 - p1)) * sgn(cross(p2 - p1, p4 - p1)) <= 0 &&
         sgn(cross(p4 - p3, p1 - p3)) * sgn(cross(p4 - p3, p2 - p3)) <= 0;
}
point inter(const point& P, const point& v, const point& Q, const point& w) {
  if (!seg_inter(P, P + v, Q, Q + w)) return point(1e16, -1e16);
  point u = P - Q;
  if (sgn(cross(v, w)) == 0) {
    if (sgn(cross(Q - P, v)) == 0) return point(-1e16, -1e16);
    return point(1e16, 1e16);
  }
  double t = cross(w, u) / cross(v, w);
  return P + v * t;
}
point a[103], tmp;
int n;
point spin(const point& p, double t) {
  double R = sqrt(p.x * p.x + p.y * p.y), B = atan2(p.y, p.x);
  return point(R * cos(t + B), R * sin(t + B));
}
int main() {
  double h, w, t;
  scanf("%lf%lf%lf", &w, &h, &t);
  t = t * pi / 180;
  a[1] = point(w / 2, h / 2), a[2] = point(w / 2, -h / 2),
  a[3] = point(-w / 2, -h / 2), a[4] = point(-w / 2, h / 2);
  a[5] = spin(a[1], t), a[6] = spin(a[2], t), a[7] = spin(a[3], t),
  a[8] = spin(a[4], t);
  n = 8;
  for (int i = 1; i <= 4; i++) {
    for (int j = 5; j <= 8; j++) {
      tmp = inter(a[i], (i == 4 ? a[1] : a[i + 1]) - a[i], a[j],
                  (j == 8 ? a[5] : a[j + 1]) - a[j]);
      if (tmp.x != 1e16 && tmp.x != -1e16) a[++n] = tmp;
    }
  }
  sort(a + 1, a + n + 1);
  double ans = cross(a[n], a[1]);
  for (int i = 1; i < n; i++) ans += cross(a[i], a[i + 1]);
  printf("%.9lf\n", 2 * w * h - abs(ans / 2));
  return 0;
}
