#include <bits/stdc++.h>
using namespace std;
int DEBUG = 0;
const double eps = 1.0e-10;
const double pi = 3.141592653589793238462;
double dMin(double a, double b) { return (a < b ? a : b); }
double dMax(double a, double b) { return (a > b ? a : b); }
double dAbs(double a) { return (a >= 0 ? a : -a); }
struct PT {
  double angle;
  double x;
  double y;
  PT() {}
  PT(double angle_, double x_, double y_) : angle(angle_), x(x_), y(y_) {}
  bool operator<(const PT &b) const {
    if (this->angle < b.angle) return true;
    if (this->angle > b.angle) return false;
    if (this->x < b.x) return true;
    if (this->x > b.x) return false;
    if (this->y < b.y) return true;
    if (this->y > b.y) return false;
    return false;
  }
};
double point_distance(double x1, double y1, double x2, double y2) {
  return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
bool point_on_segment(double x, double y, double x1, double y1, double x2,
                      double y2) {
  if (dAbs(point_distance(x, y, x1, y1) + point_distance(x, y, x2, y2) -
           point_distance(x1, y1, x2, y2)) < eps)
    return true;
  return false;
}
bool segment_intersect(double x1, double y1, double x2, double y2, double x3,
                       double y3, double x4, double y4, double &x, double &y) {
  x = 0;
  y = 0;
  double dx21 = x2 - x1;
  double dx31 = x3 - x1;
  double dx43 = x4 - x3;
  double dy21 = y2 - y1;
  double dy31 = y3 - y1;
  double dy43 = y4 - y3;
  double A = dy21 * dx43 - dy43 * dx21;
  if (dAbs(A) < eps) {
    return false;
  }
  x = (dy21 * dx43 * x1 - dy43 * dx21 * x3 + dy31 * dx21 * dx43) / (A);
  y = (dx21 * dy43 * y1 - dx43 * dy21 * y3 + dx31 * dy21 * dy43) / (-A);
  if (point_on_segment(x, y, x1, y1, x2, y2) &&
      point_on_segment(x, y, x3, y3, x4, y4))
    return true;
  return false;
}
double shoelace_area(double x1, double y1, double x2, double y2, double x3,
                     double y3) {
  return dAbs(0.5 *
              (x1 * y2 + x2 * y3 + x3 * y1 - x2 * y1 - x3 * y2 + x1 * y3));
}
void rotate(double x0, double y0, double theta, double &x, double &y) {
  double co = cos(theta);
  double si = sin(theta);
  x = x0 * co - y0 * si;
  y = x0 * si + y0 * co;
}
int main(int argc, char **argv) {
  DEBUG = (argc >= 2) ? atoi(argv[1]) : 0;
  double w, h, alpha;
  int ialpha;
  cin >> w >> h >> ialpha;
  alpha = ialpha;
  if (ialpha == 0 || ialpha == 180) {
    printf("%.10lf\n", w * h);
    return 0;
  }
  if (alpha == 90) {
    printf("%.10lf\n", (min(w, h) * min(w, h)));
    return 0;
  }
  double xo[4], yo[4], xr[4], yr[4];
  xo[0] = w / 2.0;
  yo[0] = h / 2.0;
  xo[1] = -xo[0];
  yo[1] = yo[0];
  xo[2] = -xo[0];
  yo[2] = -yo[0];
  xo[3] = xo[0];
  yo[3] = -yo[0];
  double alpha_rad = alpha / 180.0 * pi;
  for (int i = 0; i < 4; i++) {
    rotate(xo[i], yo[i], alpha_rad, xr[i], yr[i]);
  }
  vector<PT> vec;
  double x, y;
  for (int i1 = 0; i1 < 4; i1++) {
    int i2 = (i1 + 1) % 4;
    for (int j1 = 0; j1 < 4; j1++) {
      int j2 = (j1 + 1) % 4;
      if (segment_intersect(xo[i1], yo[i1], xo[i2], yo[i2], xr[j1], yr[j1],
                            xr[j2], yr[j2], x, y)) {
        double angle = atan2(y, x);
        vec.push_back(PT(angle, x, y));
        if (DEBUG) {
          printf(
              "%.2f %.2f | %.2f %.2f %.2f %.2f | %.2f %.2f %.2f %.2f,  "
              "vec.size()= %d\n",
              x, y, xo[i1], yo[i1], xo[i2], yo[i2], xr[j1], yr[j1], xr[j2],
              yr[j2], vec.size());
        }
      }
    }
  }
  sort(vec.begin(), vec.end());
  double area = 0.0;
  for (int i = 0; i < int(vec.size()); i++) {
    int i2 = (i + 1) % vec.size();
    area += shoelace_area(0, 0, vec[i].x, vec[i].y, vec[i2].x, vec[i2].y);
  }
  printf("%.10lf\n", area);
  return 0;
}
