#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point() {}
  point(double a, double b) { x = a, y = b; }
};
double crossProduct(point A, point B, point O) {
  return (A.x - O.x) * (B.y - O.y) - (B.x - O.x) * (A.y - O.y);
}
int orientation(point p, point q, point r) {
  double val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
  if (abs(val) < 1e-12) return 0;
  return (val > 0.0) ? 1 : 2;
}
vector<point> convexHull(vector<point> P) {
  int N = P.size();
  int p = 0;
  for (int i = 1; i < N; i++)
    if (P[i].x < P[p].x) p = i;
  int start = p;
  vector<point> ans;
  do {
    int n = -1;
    for (int i = 0; i < N; i++) {
      if (i == p) continue;
      if (n == -1) n = i;
      int cross = orientation(P[p], P[i], P[n]);
      if (cross == 2) {
        n = i;
      }
    }
    p = n;
    ans.push_back(P[p]);
  } while (start != p);
  return ans;
}
double degreeToRadian(double x) { return (x * acos(0.0) * 2.0) / 180.0; }
pair<double, double> getLine(double m, double x, double y, double alpha) {
  double x1 = x * cos(alpha) - y * sin(alpha);
  double y1 = x * sin(alpha) + y * cos(alpha);
  double c1 = y1 - m * x1;
  return make_pair(m, c1);
}
int check(double x1, double y1, double w, double h) {
  w /= 2.0, h /= 2.0;
  if (((x1 >= -w && x1 <= w) || abs(x1 - w) < 1e-12) &&
      ((y1 >= -h && y1 <= h) || abs(y1 - h) < 1e-12))
    return 1;
  return 0;
}
pair<double, double> lines[4];
int main() {
  int w1, h1, alpha1;
  double w, h, alpha;
  scanf("%d%d%d", &w1, &h1, &alpha1);
  w = w1, h = h1, alpha = alpha1;
  if (alpha1 == 90) {
    printf("%0.9lf\n", w * w);
    return 0;
  } else if (alpha1 == 180) {
    printf("%0.9lf\n", w * h);
    return 0;
  }
  alpha = degreeToRadian(alpha);
  lines[0] = getLine(tan(alpha), w / 2.0, h / 2.0, alpha);
  lines[1] = getLine(-1.0 / tan(alpha), -w / 2.0, h / 2.0, alpha);
  lines[2] = getLine(tan(alpha), -w / 2.0, -h / 2.0, alpha);
  lines[3] = getLine(-1.0 / tan(alpha), w / 2.0, -h / 2.0, alpha);
  vector<pair<double, double> > intersections;
  for (int i = 0; i < 4; i++) {
    double m = lines[i].first, c = lines[i].second;
    double y2 = h / 2.0;
    intersections.push_back(make_pair((y2 - c) / m, y2));
    y2 = -h / 2.0;
    intersections.push_back(make_pair((y2 - c) / m, y2));
  }
  for (int i = 0; i < 4; i++) {
    double m = lines[i].first, c = lines[i].second;
    double x2 = w / 2.0;
    intersections.push_back(make_pair(x2, m * x2 + c));
    x2 = -w / 2.0;
    intersections.push_back(make_pair(x2, m * x2 + c));
  }
  vector<point> V1;
  for (int i = 0; i < intersections.size(); i++)
    if (check(intersections[i].first, intersections[i].second, w, h)) {
      V1.push_back(point(intersections[i].first, intersections[i].second));
    }
  vector<point> V2 = convexHull(V1);
  double area = 0.0;
  for (int i = 1; i + 1 < V2.size(); i++) {
    double x1 = V2[i].x - V2[0].x;
    double y1 = V2[i].y - V2[0].y;
    double x2 = V2[i + 1].x - V2[0].x;
    double y2 = V2[i + 1].y - V2[0].y;
    area += x1 * y2 - x2 * y1;
  }
  area /= 2.0;
  printf("%0.9lf\n", area);
  return 0;
}
