#include <bits/stdc++.h>
using namespace std;
complex<double> rotate(complex<double> p, double a) {
  double x = p.real();
  double y = p.imag();
  return complex<double>(x * cos(a) - y * sin(a), x * sin(a) + y * cos(a));
}
double dot(complex<double> a, complex<double> b) {
  return a.real() * b.real() + a.imag() * b.imag();
}
double cross(complex<double> a, complex<double> b) {
  return a.real() * b.imag() - a.imag() * b.real();
}
bool isIntersectLnsg(complex<double> a1, complex<double> a2, complex<double> b1,
                     complex<double> b2) {
  if (cross(a2 - a1, b1 - a1) * cross(a2 - a1, b2 - a1) >= (1e-10))
    return false;
  if (cross(b2 - b1, a1 - b1) * cross(b2 - b1, a2 - b1) >= (1e-10))
    return false;
  return true;
}
bool EQ(complex<double> x, complex<double> y) {
  if (abs(x.real() - y.real()) > (1e-10)) return false;
  if (abs(x.imag() - y.imag()) > (1e-10)) return false;
  return true;
}
complex<double> intersectionLnsg(complex<double> a1, complex<double> a2,
                                 complex<double> b1, complex<double> b2) {
  if (EQ(a1, b1) || EQ(a1, b2)) return a1;
  if (EQ(a2, b1) || EQ(a2, b2)) return a2;
  complex<double> b = b2 - b1;
  double d1 = abs(cross(b, a1 - b1));
  double d2 = abs(cross(b, a2 - b1));
  double t = d1 / (d1 + d2);
  return a1 + (a2 - a1) * t;
}
bool sorter(const complex<double> &p, const complex<double> &q) {
  double a = atan2(p.imag(), p.real());
  double b = atan2(q.imag(), q.real());
  return a < b;
}
int main() {
  double w, h, a;
  cin >> w >> h >> a;
  w /= 2;
  h /= 2;
  double alpha = acos(-1) / 180 * a;
  vector<complex<double> > v;
  v.push_back(complex<double>(w, h));
  v.push_back(complex<double>(w, -h));
  v.push_back(complex<double>(-w, -h));
  v.push_back(complex<double>(-w, h));
  vector<complex<double> > u;
  for (int i = 0; i < 4; i++) u.push_back(rotate(v[i], alpha));
  vector<complex<double> > ps;
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      if (isIntersectLnsg(v[i], v[(i + 1) % 4], u[j], u[(j + 1) % 4]))
        ps.push_back(
            intersectionLnsg(v[i], v[(i + 1) % 4], u[j], u[(j + 1) % 4]));
    }
  }
  sort(ps.begin(), ps.end(), sorter);
  double ret = 0;
  int sz = ps.size();
  for (int i = 0; i < (int)(sz); i++) ret += cross(ps[i], ps[(i + 1) % sz]);
  ret /= 2;
  if (ret < 0) ret = -ret;
  printf("%.16lf\n", ret);
  return 0;
}
