#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const int MXX = 15;
inline int sgn(double x) { return x < -eps ? -1 : x > eps; }
struct Line {
  complex<double> p;
  complex<double> v;
  double a;
  Line(complex<double> p = 0, complex<double> v = 0) : p(p), v(v) {
    a = arg(v);
  }
};
double cross(complex<double> u, complex<double> v) {
  return u.real() * v.imag() - u.imag() * v.real();
}
complex<double> rotate(complex<double> v, double a) {
  return v * polar(1.0, a);
}
double w, h, a;
int n;
Line l[MXX];
inline void Prepare() {
  l[n++] = Line(complex<double>(-w / 2, -h / 2), complex<double>(1, 0));
  l[n++] = Line(complex<double>(w / 2, -h / 2), complex<double>(0, 1));
  l[n++] = Line(complex<double>(w / 2, h / 2), complex<double>(-1, 0));
  l[n++] = Line(complex<double>(-w / 2, h / 2), complex<double>(0, -1));
  l[n++] = Line(rotate(complex<double>(-w / 2, -h / 2), a),
                rotate(complex<double>(1, 0), a));
  l[n++] = Line(rotate(complex<double>(w / 2, -h / 2), a),
                rotate(complex<double>(0, 1), a));
  l[n++] = Line(rotate(complex<double>(w / 2, h / 2), a),
                rotate(complex<double>(-1, 0), a));
  l[n++] = Line(rotate(complex<double>(-w / 2, h / 2), a),
                rotate(complex<double>(0, -1), a));
}
double polygon_area(const vector<complex<double> > &g) {
  double s = 0;
  for (int i = 1; i < (int)g.size() - 1; i++) {
    s += cross(g[i] - g[0], g[i + 1] - g[0]);
  }
  return fabs(s) / 2.0;
}
bool line_inter(Line a, Line b, complex<double> &p) {
  double c = cross(a.v, b.v);
  if (!sgn(c)) return false;
  p = a.p + a.v * (cross(b.v, a.p - b.p) / c);
  return true;
}
int on_left(complex<double> p, Line l) { return sgn(cross(p - l.p, l.v)) < 0; }
inline bool cmp(Line a, Line b) {
  return sgn(a.a - b.a) ? a.a < b.a : cross(a.v, b.p - a.p) < 0;
}
void halfplane_inter(Line l[], int n, vector<complex<double> > &g) {
  vector<complex<double> > q(n);
  int head = 0, tail = 0;
  sort(l, l + n, cmp);
  for (int i = 1; i < n; i++) {
    if (!sgn(l[i].a - l[i - 1].a)) continue;
    while (head < tail && !on_left(q[tail - 1], l[i])) --tail;
    while (head < tail && !on_left(q[head], l[i])) ++head;
    l[++tail] = l[i];
    if (head < tail) line_inter(l[tail - 1], l[tail], q[tail - 1]);
  }
  while (head < tail && !on_left(q[tail - 1], l[head])) --tail;
  if (head < tail) line_inter(l[tail], l[head], q[tail]);
  g.assign(q.begin() + head, q.begin() + tail + 1);
}
inline void solve() {
  scanf("%lf%lf%lf", &w, &h, &a);
  a = a / 180 * acos(-1);
  Prepare();
  vector<complex<double> > final;
  halfplane_inter(l, n, final);
  double ans = polygon_area(final);
  printf("%.8lf\n", ans);
}
int main() {
  solve();
  return 0;
}
