#include <bits/stdc++.h>
using namespace std;
inline int signum(double x) {
  return (abs(x) < (1.0e-10) ? 0 : x > 0 ? 1 : -1);
}
struct L {
  complex<double> pos, dir;
};
struct C {
  complex<double> p;
  double r;
};
inline double norm(complex<double> p) {
  return p.real() * p.real() + p.imag() * p.imag();
}
inline double inp(const complex<double>& a, const complex<double>& b) {
  return (conj(a) * b).real();
}
inline double outp(const complex<double>& a, const complex<double>& b) {
  return (conj(a) * b).imag();
}
inline int ccw(const complex<double>& p, const complex<double>& r,
               const complex<double>& s) {
  complex<double> a(r - p), b(s - p);
  int sgn = signum(outp(a, b));
  if (sgn != 0) return sgn;
  if (a.real() * b.real() < -(1.0e-10) || a.imag() * b.imag() < -(1.0e-10))
    return -1;
  if (norm(a) < norm(b) - (1.0e-10)) return 1;
  return 0;
}
inline complex<double> proj(const complex<double>& p,
                            const complex<double>& b) {
  return b * inp(p, b) / norm(b);
}
inline complex<double> perf(const L& l, const complex<double>& p) {
  L m = {l.pos - p, l.dir};
  return (p + (m.pos - proj(m.pos, m.dir)));
}
inline L proj(const L& s, const L& b) {
  return (L){perf(b, s.pos), proj(s.dir, b.dir)};
}
bool ll_intersects(const L& l, const L& m) {
  return (abs(outp(l.dir, m.dir)) > (1.0e-10) ||
          abs(outp(l.dir, m.pos - l.pos)) < (1.0e-10));
}
complex<double> line_cross(const L& l, const L& m) {
  double num = outp(m.dir, m.pos - l.pos);
  double denom = outp(m.dir, l.dir);
  return complex<double>(l.pos + l.dir * num / denom);
}
bool ls_intersects(const L& l, const L& s) {
  return (signum(outp(l.dir, s.pos - l.pos)) *
              signum(outp(l.dir, s.pos + s.dir - l.pos)) <=
          0);
}
bool sp_intersects(const L& s, const complex<double>& p) {
  return (abs(s.pos - p) + abs(s.pos + s.dir - p) - abs(s.dir) < (1.0e-10));
}
bool ss_intersects(const L& s, const L& t) {
  return (ccw(s.pos, s.pos + s.dir, t.pos) *
                  ccw(s.pos, s.pos + s.dir, t.pos + t.dir) <=
              0 &&
          ccw(t.pos, t.pos + t.dir, s.pos) *
                  ccw(t.pos, t.pos + t.dir, s.pos + s.dir) <=
              0);
}
double area(vector<complex<double> >& g) {
  int n = g.size();
  double s = 0.0;
  for (int i = 0; i < n; i++) {
    int j = (i + 1) % n;
    s += outp(g[i], g[j]) / 2;
  }
  return abs(s);
}
bool xy_less(const complex<double>& a, const complex<double>& b) {
  if (abs(a.imag() - b.imag()) < (1.0e-10)) return (a.real() < b.real());
  return (a.imag() < b.imag());
}
template <class IN>
void walk_rightside(IN begin, IN end, vector<complex<double> >& v) {
  IN cur = begin;
  v.push_back(*cur++);
  vector<complex<double> >::size_type s = v.size();
  v.push_back(*cur++);
  while (cur != end) {
    if (v.size() == s || ccw(v[v.size() - 2], v.back(), *cur) > (1.0e-10))
      v.push_back(*cur++);
    else
      v.pop_back();
  }
  v.pop_back();
}
vector<complex<double> > convex_hull(vector<complex<double> > v) {
  if (v.size() <= 1) return v;
  sort(v.begin(), v.end(), xy_less);
  vector<complex<double> > cv;
  walk_rightside(v.begin(), v.end(), cv);
  walk_rightside(v.rbegin(), v.rend(), cv);
  return cv;
}
complex<double> rotate(complex<double> a, double angle) {
  double rad = 3.1415926535897932384 * angle / 180.0;
  return complex<double>(cos(rad) * a.real() - sin(rad) * a.imag(),
                         sin(rad) * a.real() + cos(rad) * a.imag());
}
double w, h, a;
int main() {
  while (cin >> w >> h >> a) {
    vector<complex<double> > s1(4), s2;
    s1[0] = complex<double>(w / 2, h / 2);
    s1[1] = complex<double>(w / 2, -h / 2);
    s1[2] = complex<double>(-w / 2, -h / 2);
    s1[3] = complex<double>(-w / 2, h / 2);
    if (abs(a) < (1.0e-10) || abs(a - 180.0) < (1.0e-10)) {
      printf("%.10f\n", area(s1));
      continue;
    }
    s2 = s1;
    for (int i = 0; i < (int)(4); i++) s2[i] = rotate(s2[i], a);
    vector<L> l1, l2;
    for (int i = 0; i < (int)(4); i++) {
      l1.push_back((L){s1[i], s1[(i + 1) % 4] - s1[i]});
      l2.push_back((L){s2[i], s2[(i + 1) % 4] - s2[i]});
    }
    vector<complex<double> > g;
    for (int i = 0; i < (int)(4); i++)
      for (int j = 0; j < (int)(4); j++) {
        if (ss_intersects(l1[i], l2[j])) g.push_back(line_cross(l1[i], l2[j]));
      }
    g = convex_hull(g);
    printf("%.10f\n", area(g));
  }
  return 0;
}
