#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
double w, h, a;
double pi = acos(-1);
pair<double, double> semula[4], rotasi[4];
vector<double> hori, verti;
void check() {
  for (int i = 0; i < 4; i++) {
    pair<double, double> dot;
    dot.first = min(rotasi[i].first, rotasi[(i + 1) % 4].first);
    dot.second = max(rotasi[i].first, rotasi[(i + 1) % 4].first);
    if (dot.first - semula[1].first <= EPS &&
        dot.second - semula[1].first >= EPS) {
      pair<double, double> selisih;
      selisih.first = rotasi[(i + 1) % 4].first - rotasi[i].first;
      selisih.second = rotasi[(i + 1) % 4].second - rotasi[i].second;
      double gradien = selisih.second / selisih.first;
      double y =
          gradien * (semula[1].first - rotasi[i].first) + rotasi[i].second;
      verti.push_back(y);
    }
    dot.first = min(rotasi[i].second, rotasi[(i + 1) % 4].second);
    dot.second = max(rotasi[i].second, rotasi[(i + 1) % 4].second);
    if (dot.first - semula[1].second <= EPS &&
        dot.second - semula[1].second >= EPS) {
      pair<double, double> selisih;
      selisih.first = rotasi[(i + 1) % 4].first - rotasi[i].first;
      selisih.second = rotasi[(i + 1) % 4].second - rotasi[i].second;
      double gradien = selisih.second / selisih.first;
      double x =
          (semula[1].second * selisih.first + rotasi[i].first * selisih.second -
           rotasi[i].second * selisih.first) /
          selisih.second;
      hori.push_back(x);
    }
  }
  sort(hori.begin(), hori.end());
  sort(verti.begin(), verti.end());
}
double cut1() {
  double res = 0;
  res += (hori[0] - semula[1].first) * (semula[1].second - verti[1]);
  res += (semula[0].first - hori[1]) * (verti[0] - semula[2].second);
  return res;
}
double cut2() {
  double res = 0;
  if (!hori.empty()) {
    res += ((hori[0] - semula[1].first) + (semula[0].first - hori[1])) * h;
  } else {
    res += ((semula[1].second - verti[1]) + (verti[0] - semula[2].second)) * w;
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> w >> h >> a;
  cout << setprecision(10) << fixed;
  if (a == 0 || a == 180) {
    cout << (double)w * h << '\n';
    return 0;
  }
  if (a == 90) {
    cout << (double)min(w, h) * min(w, h) << '\n';
    return 0;
  }
  semula[0] = make_pair(w / 2., h / 2.);
  semula[1] = make_pair(-w / 2., h / 2.);
  semula[2] = make_pair(-w / 2., -h / 2.);
  semula[3] = make_pair(w / 2., -h / 2.);
  for (int i = 0; i < 4; i++) {
    rotasi[i].first = semula[i].first * cos(a * pi / 180.) -
                      semula[i].second * sin(a * pi / 180.);
    rotasi[i].second = semula[i].first * sin(a * pi / 180.) +
                       semula[i].second * cos(a * pi / 180.);
  }
  double ans = w * h;
  check();
  if (hori.size() == 2 && verti.size() == 2) {
    ans -= cut1();
  } else {
    ans -= cut2();
  }
  cout << ans << '\n';
  return 0;
}
