#include <bits/stdc++.h>
using namespace std;
struct Point {
  long double x, y;
  Point() {}
  Point(long double x, long double y) : x(x), y(y) {}
} O(0, 0);
Point operator*(const Point &A, const long double &K) {
  return Point(A.x * K, A.y * K);
}
Point operator+(const Point &A, const Point &B) {
  return Point(A.x + B.x, A.y + B.y);
}
Point operator-(const Point &A, const Point &B) {
  return Point(A.x - B.x, A.y - B.y);
}
bool operator<(const Point &a, const Point &b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
long double cross(const Point &A, const Point &B) {
  return A.x * B.y - A.y * B.x;
}
long double area(const Point &A, const Point &B, const Point &C) {
  return cross(B - A, C - A);
}
bool between(const Point &A, const Point &B, const Point &P) {
  return P.x + (1e-8) >= min(A.x, B.x) && P.x <= min(A.x, B.x) + (1e-8) &&
         P.y + (1e-8) >= min(A.y, B.y) && P.y <= min(A.y, B.y) + (1e-8);
}
bool onSegment(const Point &A, const Point &B, const Point &P) {
  return abs(area(A, B, P)) < (1e-8) && between(A, B, P);
}
bool intersects(const Point &P1, const Point &P2, const Point &P3,
                const Point &P4) {
  long double A1 = area(P3, P4, P1);
  long double A2 = area(P3, P4, P2);
  long double A3 = area(P1, P2, P3);
  long double A4 = area(P1, P2, P4);
  if (A1 * A2 < (1e-8) && A3 * A4 < (1e-8)) return 1;
  if (onSegment(P3, P4, P1)) return 1;
  if (onSegment(P3, P4, P2)) return 1;
  if (onSegment(P1, P2, P3)) return 1;
  if (onSegment(P1, P2, P4)) return 1;
  return 0;
}
bool pointInPoly(vector<Point> &Poly, Point P) {
  int nP = Poly.size(), cnt = 0;
  for (int i = 0; i < (nP); i++) {
    if (onSegment(Poly[i], Poly[(i + 1) % nP], P)) return 0;
    cnt += intersects(Poly[i], Poly[(i + 1) % nP], P,
                      P + Point(1000000009, 1000000007));
  }
  return cnt & 1;
}
vector<Point> ConvexHull(vector<Point> Poly) {
  sort(Poly.begin(), Poly.end());
  int nP = Poly.size(), k = 0;
  Point H[2 * nP];
  for (int i = 0; i < nP; ++i) {
    while (k >= 2 && area(H[k - 2], H[k - 1], Poly[i]) <= 0) --k;
    H[k++] = Poly[i];
  }
  for (int i = nP - 2, t = k; i >= 0; --i) {
    while (k > t && area(H[k - 2], H[k - 1], Poly[i]) <= 0) --k;
    H[k++] = Poly[i];
  }
  if (k == 0) return vector<Point>();
  return vector<Point>(H, H + k - 1);
}
Point lineIntersection(const Point &A, const Point &B, const Point &C,
                       const Point &D) {
  return A + (B - A) * (cross(C - A, D - C) / cross(B - A, D - C));
}
long double area(const vector<Point> &P) {
  int nP = P.size();
  long double A = 0;
  for (int i = 1; i <= nP - 2; i++) A += area(P[0], P[i], P[i + 1]);
  return abs(A / 2);
}
Point rot(Point P, long double angle) {
  long double X = P.x * cos(angle) - P.y * sin(angle);
  long double Y = P.x * sin(angle) + P.y * cos(angle);
  return Point(X, Y);
}
int main() {
  long double W, H, a;
  while (cin >> W >> H >> a) {
    vector<Point> A;
    W /= 2, H /= 2;
    A.push_back(Point(W, H));
    A.push_back(Point(-W, H));
    A.push_back(Point(-W, -H));
    A.push_back(Point(W, -H));
    vector<Point> B(4);
    for (int i = 0; i < (4); i++) B[i] = rot(A[i], a * acos(-1.0) / 180.0);
    vector<Point> Poly;
    for (int i = 0; i < (4); i++)
      if (pointInPoly(A, B[i])) Poly.push_back(B[i]);
    for (int i = 0; i < (4); i++)
      if (pointInPoly(B, A[i])) Poly.push_back(A[i]);
    for (int i = 0; i < (4); i++)
      for (int j = 0; j < (4); j++)
        if (intersects(A[i], A[(i + 1) % 4], B[j], B[(j + 1) % 4]) &&
            abs(cross(A[i] - A[(i + 1) % 4], B[j] - B[(j + 1) % 4])) > (1e-8)) {
          Point Inter =
              lineIntersection(A[i], A[(i + 1) % 4], B[j], B[(j + 1) % 4]);
          Poly.push_back(Inter);
        }
    for (int i = 0; i < (4); i++)
      for (int j = 0; j < (4); j++)
        if (onSegment(A[i], A[(i + 1) % 4], B[j])) Poly.push_back(B[j]);
    for (int i = 0; i < (4); i++)
      for (int j = 0; j < (4); j++)
        if (onSegment(B[i], B[(i + 1) % 4], A[j])) Poly.push_back(A[j]);
    Poly = ConvexHull(Poly);
    printf("%.10f\n", double(area(Poly)));
  }
}
