#include <bits/stdc++.h>
using namespace std;
int main() {
  cout.precision(10);
  long double x1, y1, r1, x2, y2, r2;
  cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
  long double PI = 2 * acos(0.0);
  long double d = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
  long double small = min(r1, r2), large = max(r1, r2);
  if (d + small <= large) {
    cout << small * small * (PI);
  } else if (d <= r1 + r2) {
    long double s = (r1 + r2 + d) / 2.0;
    long double S = sqrt(s * (s - r1) * (s - r2) * (s - d));
    long double h = 2.0 * S / (d);
    long double ans = 0;
    long double tt = (r1 * r1 + d * d);
    if (tt < r2 * r2) {
      s = (r1 + r1 + (h * 2)) / 2.0;
      S = sqrt(s * (s - r1) * (s - r1) * (s - (h * 2.0)));
      long double th1 = (asin(h / r1)) * 2.0;
      long double th2 = (asin(h / r2)) * 2.0;
      s = (r1 + r2 + d) / 2.0;
      S = sqrt(s * (s - r1) * (s - r2) * (s - d));
      ans +=
          (PI * r1 * r1 - r1 * r1 * th1 / 2.0 + r2 * r2 * th2 / 2.0) - 2.0 * S;
      cout << ans;
      return 0;
    }
    tt = (r2 * r2 + d * d);
    if (tt < r1 * r1) {
      s = (r2 + r2 + (h * 2)) / 2.0;
      S = sqrt(s * (s - r2) * (s - r2) * (s - (h * 2.0)));
      long double th1 = (asin(h / r1)) * 2.0;
      long double th2 = (asin(h / r2)) * 2.0;
      s = (r1 + r2 + d) / 2.0;
      S = sqrt(s * (s - r1) * (s - r2) * (s - d));
      ans +=
          (r1 * r1 * th1 / 2.0 + PI * r2 * r2 - r2 * r2 * th2 / 2.0) - 2.0 * S;
      cout << ans;
      return 0;
    }
    long double th1 = (asin(h / r1)) * 2.0;
    long double th2 = (asin(h / r2)) * 2.0;
    s = (r1 + r2 + d) / 2.0;
    S = sqrt(s * (s - r1) * (s - r2) * (s - d));
    ans += (r1 * r1 * th1 / 2.0 + r2 * r2 * th2 / 2.0) - 2.0 * S;
    cout << ans;
  } else {
    printf("0.0");
  }
  return 0;
}
