#include <bits/stdc++.h>
using namespace std;
typedef priority_queue<long long, vector<long long>, greater<long long>>
    minHeap;
const long long MD = 1e9 + 7;
inline long long mul(long long a, long long b) { return (a * b) % MD; }
inline long long po(long long a, long long b) {
  long long ans = 1;
  while (b > 0) {
    if (b & 1) ans = mul(ans, a);
    a = mul(a, a);
    b /= 2;
  }
  return ans;
}
long long INF = 1e17;
const int N = 2e5 + 22;
long long n, m, t, k;
long long arr[N];
long long x;
string s;
long double x1, x2, y11, y2, r1, r2;
long double doo = 2;
long double pi = doo * asin(1);
int main() {
  ios::sync_with_stdio(false);
  cin >> x1 >> y11 >> r1 >> x2 >> y2 >> r2;
  long double d = sqrt((x1 - x2) * (x1 - x2) + (y11 - y2) * (y11 - y2));
  if (d >= r1 + r2) {
    printf("%.7lf", 0);
    return 0;
  } else if (d <= abs(r1 - r2)) {
    long double r = min(r1, r2);
    printf("%.7lf", double(pi * r * r));
    return 0;
  }
  long double teta;
  teta = acos((d * d + r1 * r1 - r2 * r2) / (doo * d * r1));
  long double ans = 0;
  ans += teta * (r1 * r1);
  ans -= r1 * r1 * sin(doo * teta) / doo;
  teta = acos((d * d - r1 * r1 + r2 * r2) / (doo * d * r2));
  ans += teta * (r2 * r2);
  ans -= r2 * r2 * sin(doo * teta) / doo;
  printf("%.7lf\n", (double)ans);
  return 0;
}
