#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979323846264338327950288419716939937510;
struct coord_t {
  double x, y;
  coord_t() {}
  coord_t(const double& x, const double& y) : x(x), y(y) {}
  coord_t operator-(const coord_t& that) const {
    return coord_t(x - that.x, y - that.y);
  }
  coord_t rotate(const double&);
};
struct lines_t {
  coord_t p, q;
  double a, b, c;
  lines_t(const coord_t& p, const coord_t& q) : p(p), q(q) {
    a = q.y - p.y;
    b = p.x - q.x;
    c = p.y * q.x - p.x * q.y;
  }
  double get_x(const double&);
  double get_y(const double&);
  bool contains(const coord_t&);
  bool intersects(const lines_t&);
};
double rad(const double&);
double ccw(const coord_t&, const coord_t&, const coord_t&);
int main(int argc, const char* argv[]) {
  double size_x, size_y, deg;
  scanf("%lf%lf%lf", &size_x, &size_y, &deg);
  if (size_x < size_y) {
    swap(size_x, size_y);
  }
  if (deg > 90) {
    deg = 180 - deg;
  }
  if (deg == 0) {
    printf("%.8lf\n", size_x * size_y);
  } else if (deg == 90) {
    printf("%.8lf\n", pow(min(size_x, size_y), 2));
  } else {
    auto top_left = coord_t(-size_x / 2, size_y / 2);
    auto top_right = coord_t(size_x / 2, size_y / 2);
    auto bottom_left = coord_t(-size_x / 2, -size_y / 2);
    auto bottom_right = coord_t(size_x / 2, -size_y / 2);
    auto top = lines_t(top_left, top_right);
    auto left = lines_t(top_left, bottom_left);
    auto right = lines_t(top_right, bottom_right);
    auto bottom = lines_t(bottom_left, bottom_right);
    auto rot_top = lines_t(top_left.rotate(deg), top_right.rotate(deg));
    auto rot_right = lines_t(top_right.rotate(deg), bottom_right.rotate(deg));
    if (rot_right.intersects(top)) {
      printf("%.8lf\n", size_x * size_y -
                            (size_y / 2 - rot_right.get_y(size_x / 2)) *
                                (size_x / 2 - rot_right.get_x(size_y / 2)) -
                            (rot_top.get_x(size_y / 2) + size_x / 2) *
                                (size_y / 2 - rot_top.get_y(-size_x / 2)));
    } else {
      printf("%.8lf\n",
             -1 * (rot_top.get_x(size_y / 2) + rot_top.get_x(-size_y / 2)) *
                 size_y);
    }
  }
  return 0;
}
coord_t coord_t::rotate(const double& deg) {
  double ang = rad(deg);
  return coord_t(cos(ang) * x - sin(ang) * y, sin(ang) * x + cos(ang) * y);
}
double lines_t::get_x(const double& y) { return (b * y + c) / -a; }
double lines_t::get_y(const double& x) { return (a * x + c) / -b; }
bool lines_t::contains(const coord_t& o) {
  return ccw(o, p, q) == 0 && (p.x - o.x) * (q.x - o.x) <= 0 &&
         (p.y - o.y) * (q.y - o.y) <= 0;
}
bool lines_t::intersects(const lines_t& that) {
  return ccw(p, q, that.p) * ccw(p, q, that.q) <= 0 &&
         ccw(that.p, that.q, p) * ccw(that.p, that.q, q) <= 0;
}
double rad(const double& deg) { return deg * PI / 180; }
double ccw(const coord_t& o, const coord_t& p, const coord_t& q) {
  return (p.x - o.x) * (q.y - o.y) - (p.y - o.y) * (q.x - o.x);
}
