#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y, angle;
  point() {}
  point(double a, double b, double c) {
    x = a;
    y = b;
    angle = c;
  }
};
struct line {
  double a, b, c;
  point pp, qq;
  line() {}
  line(point p1, point p2) {
    pp = p1, qq = p2;
    a = p1.y - p2.y;
    b = p2.x - p1.x;
    c = p1.x * p2.y - p2.x * p1.y;
  }
};
struct comp {
  bool operator()(const point &a, const point &b) { return a.angle < b.angle; }
};
const int debug = 0;
double findAngle(pair<double, double> pp);
bool inRange(double a, double b, double c);
bool equal(double a, double b);
int intersect(line l1, line l2, point &p);
int main() {
  int a, b, angle;
  while (cin >> a >> b >> angle) {
    point rect1[6], rect2[6];
    int i, j;
    rect1[1] = point(a / 2., b / 2., 0);
    rect1[2] = point(-a / 2., b / 2., 0);
    rect1[3] = point(-a / 2., -b / 2., 0);
    rect1[4] = point(a / 2., -b / 2., 0);
    rect1[5] = rect1[1];
    for (i = 1; i <= 5; ++i) {
      double rad = 2 * acos(0.0) * (double)angle / 180.;
      rect2[i] = point(rect1[i].x * cos(rad) + rect1[i].y * sin(rad),
                       rect1[i].y * cos(rad) - rect1[i].x * sin(rad), 0);
    }
    map<double, map<double, bool> > my;
    vector<point> poly;
    for (i = 1; i <= 4; ++i) {
      for (j = 1; j <= 4; ++j) {
        line l1 = line(rect1[i], rect1[i + 1]);
        line l2 = line(rect2[j], rect2[j + 1]);
        point p;
        int f = intersect(l1, l2, p);
        pair<double, double> pp = make_pair(p.x, p.y);
        if (f == 2) {
          if (my[p.x].find(p.y) == my[p.x].end()) {
            poly.push_back(point(pp.first, pp.second, findAngle(pp)));
            my[p.x][p.y] = 1;
          }
        }
      }
    }
    sort(poly.begin(), poly.end(), comp());
    poly.push_back(poly[0]);
    j = (int)poly.size();
    double ans = 0;
    for (i = 0; i < j - 1; ++i) {
      ans += poly[i].x * poly[i + 1].y;
      ans -= poly[i].y * poly[i + 1].x;
    }
    ans *= .5;
    ans = fabs(ans);
    printf("%.10lf\n", ans);
  }
  return 0;
}
double findAngle(pair<double, double> pp) {
  double x = pp.first;
  double y = pp.second;
  if (equal(x, 0.)) {
    if (y > 0)
      return 90.;
    else
      return 270.;
  }
  double an = atan2(y, x);
  an *= 180.;
  an /= 2 * acos(0.0);
  if (y < 0) return 360. + an;
  return an;
}
bool equal(double a, double b) {
  if (fabs(a - b) < 1e-7) return 1;
  return 0;
}
bool inRange(double a, double b, double c) {
  if ((a > b || fabs(a - b) < 1e-7) && (a < c || fabs(a - c) < 1e-7)) return 1;
  if ((a < b || fabs(a - b) < 1e-7) && (a > c || fabs(a - c) < 1e-7)) return 1;
  return 0;
}
int intersect(line l1, line l2, point &p) {
  double det = l1.a * l2.b - l1.b * l2.a;
  if (fabs(det - 0) < 1e-7) return false;
  p.x = (l1.b * l2.c - l2.b * l1.c) / det;
  p.y = (l1.c * l2.a - l2.c * l1.a) / det;
  int ret = 0;
  if (inRange(p.x, l1.pp.x, l1.qq.x) && inRange(p.y, l1.pp.y, l1.qq.y)) {
    ret++;
    if (inRange(p.x, l2.pp.x, l2.qq.x) && inRange(p.y, l2.pp.y, l2.qq.y)) ret++;
  }
  return ret;
}
