#include <bits/stdc++.h>
using namespace std;
template <typename T, typename TT>
ostream& operator<<(ostream& out, const pair<T, TT>& p) {
  out << p.first << " " << p.second;
  return out;
}
template <typename T, typename TT>
istream& operator>>(istream& in, pair<T, TT>& s) {
  in >> s.first >> s.second;
  return in;
}
const double PI = acos(0.0) * 2;
const double EPS = 1e-7;
bool eq(double a, double b) { return (fabs(a - b) < EPS); }
struct Line {
  pair<double, double> from;
  pair<double, double> to;
  double a, b, c;
  Line(pair<double, double> s, pair<double, double> e) {
    from = s;
    to = e;
    if (eq(from.first, to.first)) {
      b = 0.0;
      a = 1.0;
      c = -from.first;
    } else {
      b = 1.0;
      a = -(from.second - to.second) / (from.first - to.first);
      c = -(a * from.first + b * from.second);
    }
  }
  bool isPara(const Line& l) const { return (eq(a, l.a) && eq(b, l.b)); }
  bool in(double a, double x, double y) const {
    if (x > y) swap(x, y);
    return (a >= x && a <= y);
  }
  bool inter(const Line& l, pair<double, double>& p) const {
    if (isPara(l)) return false;
    p.first = -(b * l.c - c * l.b) / (b * l.a - a * l.b);
    if (!eq(b, 0.0)) {
      p.second = -(c + a * p.first) / b;
    } else {
      p.second = -(l.c + l.a * p.first) / l.b;
    }
    if (in(p.first, from.first, to.first) &&
        in(p.first, l.from.first, l.to.first)) {
      return true;
    }
    return false;
  }
};
double cross(pair<double, double> p, pair<double, double> q,
             pair<double, double> r) {
  return (q.second - p.second) * (r.first - q.first) -
         (q.first - p.first) * (r.second - q.second);
}
vector<pair<double, double> > ch(vector<pair<double, double> > vec) {
  vector<pair<double, double> > ret;
  int n = ((int)(vec).size());
  sort(vec.begin(), vec.end());
  int l = 0;
  int p = l, q;
  do {
    q = (p + 1) % n;
    for (int i = 0; i < n; i++)
      if (cross(vec[p], vec[i], vec[q]) < 0) q = i;
    ret.push_back(vec[q]);
    p = q;
  } while (p != l);
  return ret;
}
int main() {
  vector<int> test = {1, 2, 3};
  double w, h, a;
  cin >> w >> h >> a;
  a = a * PI / 180.0;
  vector<pair<double, double> > orig;
  orig.push_back(make_pair(w / 2, h / 2));
  orig.push_back(make_pair(-w / 2, h / 2));
  orig.push_back(make_pair(-w / 2, -h / 2));
  orig.push_back(make_pair(w / 2, -h / 2));
  orig.push_back(make_pair(w / 2, h / 2));
  vector<pair<double, double> > trans;
  for (int i = 0; i < 5; i++) {
    trans.push_back(
        make_pair(orig[i].first * cos(a) - orig[i].second * sin(a),
                  orig[i].first * sin(a) + orig[i].second * cos(a)));
  }
  vector<pair<double, double> > pnts;
  for (int(i) = 0; (i) < (4); ++(i)) {
    for (int(j) = 0; (j) < (4); ++(j)) {
      pair<double, double> p;
      if (Line(orig[i], orig[i + 1]).inter(Line(trans[j], trans[j + 1]), p)) {
        pnts.push_back(p);
      }
    }
  }
  pnts = ch(pnts);
  pnts.push_back(pnts[0]);
  double tot = 0;
  for (int i = 0; i < ((int)(pnts).size()) - 1; i++) {
    tot += abs(cross(pair<double, double>(0.0, 0.0), pnts[i], pnts[i + 1])) / 2;
  }
  cout << setprecision(8) << fixed << tot << endl;
  return 0;
}
