#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <algorithm>
#include <functional>
#include <utility>
#include <bitset>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstdio>

using namespace std;

#define REP(i,n) for((i)=0;(i)<(int)(n);(i)++)
#define snuke(c,itr) for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)

double func(double w, double h, double theta){
    double bound = atan2(h, w) * 2.0;
    if(theta > bound) return 4.0 * h * h / sin(theta);
    double ans = 4.0 * w * h;
    // d1 * (1.0 + cos(theta)) + d2 * sin(theta) = 2.0 * w
    // d1 * sin(theta) + d2 * (1.0 + cos(theta)) = 2.0 * h
    double d1 = (2.0 * w * (1.0 + cos(theta)) - 2.0 * h * sin(theta)) / ((1.0 + cos(theta)) * (1.0 + cos(theta)) - sin(theta) * sin(theta));
    double d2 = (2.0 * h * (1.0 + cos(theta)) - 2.0 * w * sin(theta)) / ((1.0 + cos(theta)) * (1.0 + cos(theta)) - sin(theta) * sin(theta));
    ans -= d1 * d1 * sin(theta) * cos(theta);
    ans -= d2 * d2 * sin(theta) * cos(theta);
    return ans;
}

int main(void){
    int w,h,alpha;
    
    cin >> w >> h >> alpha;
    
    if(alpha > 90) alpha = 180 - alpha;
    double theta = alpha / 180.0 * acos(-1.0);
    if(w < h) swap(w, h);
    
    double ans = func(w / 2.0, h / 2.0, theta);
    printf("%.9f\n", ans);
    
    return 0;
}