#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, U b) {
  if (a < b) a = b;
}
struct point {
  double first, second;
  point(double first = 0, double second = 0) : first(first), second(second) {}
  point operator-(point a) { return point(first - a.first, second - a.second); }
  point operator+(point a) { return point(first + a.first, second + a.second); }
  point operator*(double a) { return point(first * a, second * a); }
  point operator/(double a) { return point(first / a, second / a); }
  point operator&(point a) {
    return point(first * a.first - second * a.second,
                 first * a.second + second * a.first);
  }
  double operator^(point a) { return first * a.second - second * a.first; }
  double operator*(point a) { return first * a.first + second * a.second; }
  point norm() {
    double s = nor();
    if (s < 1e-8) return *this;
    return point(first / s, second / s);
  }
  double nor() { return sqrt(*this * *this); }
  double al() { return atan2(second, first); }
  bool operator<(const point &a) const {
    if (fabs(first - a.first) > 1e-8) return first < a.first;
    return second < a.second - 1e-8;
  }
  bool operator>(const point &a) const {
    if (fabs(first - a.first) > 1e-8) return first > a.first;
    return second > a.second + 1e-8;
  }
  bool operator==(const point &a) const {
    if (fabs(first - a.first) > 1e-8) return 0;
    return fabs(second - a.second) < 1e-8;
  }
  void input() { scanf("%lf %lf", &first, &second); }
  void print() { printf("%lf %lf\n", first, second); }
};
point p[111], q[111];
point convex[111];
int sgn(double a) { return (a > 1e-8) - (a < -1e-8); }
int intersect(point a, point b, point c, point d, point *p, int &nn) {
  if (min(a.first, b.first) > max(c.first, d.first) + 1e-8) return 0;
  if (max(a.first, b.first) < min(c.first, d.first) - 1e-8) return 0;
  if (min(a.second, b.second) > max(c.second, d.second) + 1e-8) return 0;
  if (max(a.second, b.second) < min(c.second, d.second) - 1e-8) return 0;
  if (sgn((a - b) ^ (c - b)) * sgn((a - b) ^ (d - b)) >= 0) return 0;
  if (sgn((c - d) ^ (a - d)) * sgn((c - d) ^ (b - d)) >= 0) return 0;
  double s1 = fabs((a - b) ^ (c - b)), s2 = fabs((a - b) ^ (d - b));
  p[nn++] = (c * s2 + d * s1) / (s1 + s2);
  return 1;
}
point tmp[111];
int is_on(point a, point b, point c) {
  if (fabs((a - b) ^ (b - c)) > 1e-8) return 0;
  return sgn((a - c) * (b - c)) <= 0;
}
double calc_al(point a, point b) { return acos((a * b) / a.nor() / b.nor()); }
bool is_in(point a, point *p) {
  p[4] = p[0];
  for (int i = 0; i < 4; i++) {
    if (is_on(p[i], p[i + 1], a)) return 1;
  }
  double al = 0;
  for (int i = 0; i < 4; i++) {
    al += calc_al(p[i] - a, p[i + 1] - a) * sgn((p[i] - a) ^ (p[i + 1] - a));
  }
  return fabs(fabs(al) - 2 * acos(-1)) < 1e-8;
}
int main() {
  int w, h, d;
  scanf("%d%d%d", &w, &h, &d);
  double al = acos(-1) * d / 180.0;
  p[0] = point(-w * 0.5, -h * 0.5);
  p[1] = point(w * 0.5, -h * 0.5);
  p[2] = point(w * 0.5, h * 0.5);
  p[3] = point(-w * 0.5, h * 0.5);
  for (int i = 0; i < 4; i++) q[i] = p[i] & point(cos(al), sin(al));
  q[4] = q[0], p[4] = p[0];
  int nn = 0;
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++)
      intersect(p[i], p[i + 1], q[j], q[j + 1], tmp, nn);
    if (is_in(q[i], p)) tmp[nn++] = q[i];
    if (is_in(p[i], q)) tmp[nn++] = p[i];
  }
  sort(tmp, tmp + nn);
  nn = unique(tmp, tmp + nn) - tmp;
  int top = 0;
  for (int i = 0; i < nn; i++) {
    while (top > 1 && sgn((convex[top - 2] - convex[top - 1]) ^
                          (tmp[i] - convex[top - 1])) <= 0)
      top--;
    convex[top++] = tmp[i];
  }
  for (int i = nn - 2, t = top; i >= 0; i--) {
    while (top > t && sgn((convex[top - 2] - convex[top - 1]) ^
                          (tmp[i] - convex[top - 1])) <= 0)
      top--;
    convex[top++] = tmp[i];
  }
  double ans = 0;
  for (int i = 0; i < top - 1; i++) ans += convex[i] ^ convex[i + 1];
  printf("%.18lf\n", fabs(ans) / 2);
  return 0;
}
