#include <bits/stdc++.h>
using namespace std;
bool intersect(const complex<long double> &a, const complex<long double> &b,
               const complex<long double> &p, const complex<long double> &q,
               complex<long double> &ret) {
  long double d1 = ((conj(p - a) * (b - a)).imag());
  long double d2 = ((conj(q - a) * (b - a)).imag());
  ret = (d1 * q - d2 * p) / (d1 - d2);
  if (fabs(d1 - d2) > 1e-9) return 1;
  return 0;
}
void polygonCut(const vector<complex<long double> > &p,
                const complex<long double> &a, const complex<long double> &b,
                vector<complex<long double> > &res) {
  res.clear();
  for (int i = 0; i < ((int)(p).size()); i++) {
    int j = (i + 1) % ((int)(p).size());
    bool in1 = ((conj(((b) - (a))) * (((p[i]) - (a)))).imag()) > 1e-9;
    bool in2 = ((conj(((b) - (a))) * (((p[j]) - (a)))).imag()) > 1e-9;
    if (in1) res.push_back(p[i]);
    if (in1 ^ in2) {
      complex<long double> r;
      intersect(a, b, p[i], p[j], r);
      res.push_back(r);
    }
  }
}
long double polygonArea(const vector<complex<long double> > &p) {
  long double res = 0;
  for (int i = 0; i < ((int)(p).size()); i++) {
    int j = (i + 1) % ((int)(p).size());
    res += ((conj(p[i]) * (p[j])).imag());
  }
  return fabs(res) / 2;
}
int main() {
  double w, h, alpha;
  cin >> w >> h >> alpha;
  vector<complex<long double> > polygon;
  polygon.push_back(complex<long double>(-w / 2, -h / 2));
  polygon.push_back(complex<long double>(w / 2, -h / 2));
  polygon.push_back(complex<long double>(w / 2, h / 2));
  polygon.push_back(complex<long double>(-w / 2, h / 2));
  vector<complex<long double> > vec = polygon;
  for (int i = 0; i < 4; ++i)
    vec[i] =
        (((vec[i]) * exp(complex<long double>(0, (alpha * acos(-1.0) / 180)))));
  for (int i = 0; i < 4; ++i) {
    vector<complex<long double> > res;
    polygonCut(polygon, vec[i], vec[(i + 1) % 4], res);
    polygon = res;
  }
  cout << fixed << setprecision(9) << polygonArea(polygon);
}
