#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
struct v2d {
  double x, y;
  double angle;
  v2d& rotate(double alpha) {
    double x1, y1;
    x1 = x * cos(alpha) - y * sin(alpha);
    y1 = x * sin(alpha) + y * cos(alpha);
    x = x1;
    y = y1;
    angle += alpha;
    return *this;
  }
} Q[5], R[30];
bool operator<(v2d v1, v2d v2) { return v1.angle < v2.angle; }
double operator*(v2d v1, v2d v2) { return v1.x * v2.x + v1.y * v2.y; }
int main() {
  int w, h, alpha;
  int n, i;
  double t;
  v2d tR;
  scanf("%d%d%d", &w, &h, &alpha);
  if (alpha > 90) alpha = 180 - alpha;
  if (alpha == 0) {
    printf("%I64d.0\n", (long long)(w)*h);
    return 0;
  }
  if (alpha == 90) {
    long long a = min(w, h);
    printf("%I64d.0\n", a * a);
    return 0;
  }
  Q[1].x = 0.5 * w;
  Q[1].y = 0.5 * h;
  Q[1].angle = atan(Q[1].y / Q[1].x);
  Q[1].rotate(alpha * PI / 180);
  Q[2].x = -0.5 * w;
  Q[2].y = 0.5 * h;
  Q[2].angle = PI - Q[1].angle;
  Q[2].rotate(alpha * PI / 180);
  Q[3].x = -0.5 * w;
  Q[3].y = -0.5 * h;
  Q[3].angle = PI + Q[1].angle;
  Q[3].rotate(alpha * PI / 180);
  Q[4].x = 0.5 * w;
  Q[4].y = -0.5 * h;
  Q[4].angle = 2 * PI - Q[1].angle;
  Q[4].rotate(alpha * PI / 180);
  Q[0] = Q[4];
  for (n = i = 0; i <= 4; ++i) {
    t = (w - 2 * Q[i - 1].x) / (2 * (Q[i].x - Q[i - 1].x));
    tR.x = 0.5 * w;
    tR.y = Q[i - 1].y + t * (Q[i].y - Q[i - 1].y);
    if (0.0 <= t && t <= 1.0 && -0.5 * h <= tR.y && tR.y <= 0.5 * h)
      R[n++] = tR;
    t = (h - 2 * Q[i - 1].y) / (2 * (Q[i].y - Q[i - 1].y));
    tR.x = Q[i - 1].x + t * (Q[i].x - Q[i - 1].x);
    tR.y = 0.5 * h;
    if (0.0 <= t && t <= 1.0 && -0.5 * w <= tR.x && tR.x <= 0.5 * w)
      R[n++] = tR;
    t = (-w - 2 * Q[i - 1].x) / (2 * (Q[i].x - Q[i - 1].x));
    tR.x = -0.5 * w;
    tR.y = Q[i - 1].y + t * (Q[i].y - Q[i - 1].y);
    if (0.0 <= t && t <= 1.0 && -0.5 * h <= tR.y && tR.y <= 0.5 * h)
      R[n++] = tR;
    t = (-h - 2 * Q[i - 1].y) / (2 * (Q[i].y - Q[i - 1].y));
    tR.x = Q[i - 1].x + t * (Q[i].x - Q[i - 1].x);
    tR.y = -0.5 * h;
    if (0.0 <= t && t <= 1.0 && -0.5 * w <= tR.x && tR.x <= 0.5 * w)
      R[n++] = tR;
  }
  for (i = 0; i < n; ++i)
    if (R[i].y >= 0.0)
      R[i].angle = acos(R[i].x / sqrt(R[i] * R[i]));
    else
      R[i].angle = 2 * PI - acos(R[i].x / sqrt(R[i] * R[i]));
  sort(R, R + n);
  double ans = 0.0;
  for (i = 1; i < n; ++i) ans += (R[i].x - R[i - 1].x) * (R[i].y + R[i - 1].y);
  ans += (R[0].x - R[n - 1].x) * (R[0].y + R[n - 1].y);
  ans = 0.5 * std::abs(ans);
  printf("%.10lf\n", ans);
  return 0;
}
