#include <bits/stdc++.h>
using namespace std;
double getk(double x1, double y1, double x2, double y2) {
  return (y2 - y1) / (x2 - x1);
}
struct tpt {
  double x;
  double y;
  tpt operator-(const tpt& t) {
    tpt p;
    p.x = x - t.x;
    p.y = y - t.y;
    return p;
  }
};
double where(tpt p) {
  if (p.x < 0)
    return M_PI;
  else if (p.y < 0)
    return 2 * M_PI;
  return 0;
}
int main() {
  tpt p1, p2, p3;
  cin.precision(15);
  cin >> p1.x >> p1.y >> p2.x >> p2.y >> p3.x >> p3.y;
  if (p1.x == p2.x) swap(p2.x, p3.x);
  if (p2.x == p3.x) swap(p1.x, p3.x);
  double k1 = getk(p1.x, p1.y, p2.x, p2.y);
  double k2 = getk(p2.x, p2.y, p3.x, p3.y);
  tpt pc;
  pc.x = (k1 * k2 * (p1.y - p3.y) + k2 * (p1.x + p2.x) - k1 * (p2.x + p3.x)) /
         (2 * (k2 - k1));
  pc.y = -1 / k1 * (pc.x - (p1.x + p2.x) / 2) + (p1.y + p2.y) / 2;
  double r =
      sqrt((pc.x - p1.x) * (pc.x - p1.x) + (pc.y - p1.y) * (pc.y - p1.y));
  k1 = getk(pc.x, pc.y, p1.x, p1.y);
  k2 = getk(pc.x, pc.y, p2.x, p2.y);
  double k3 = getk(pc.x, pc.y, p3.x, p3.y);
  double a1 = atan(k1);
  a1 += where(p1 - pc);
  double a2 = atan(k2);
  a2 += where(p2 - pc);
  double a3 = atan(k3);
  a3 += where(p3 - pc);
  double mina1 = a1 - a1 * 0.0001;
  double mina2 = a2 - a2 * 0.0001;
  double mina3 = a3 - a3 * 0.0001;
  double maxa1 = a1 + a1 * 0.0001;
  double maxa2 = a2 + a2 * 0.0001;
  double maxa3 = a3 + a3 * 0.0001;
  double amin = min(a1, a2);
  amin = min(amin, a3);
  double n = 1;
  for (double i = 3; i < 101; ++i) {
    double abase = 2 * M_PI / i;
    double a = amin;
    int cnt = 0;
    for (double k = 0; k < i; ++k) {
      if ((a > mina1) && (a < maxa1)) cnt++;
      if ((a > mina2) && (a < maxa2)) cnt++;
      if ((a > mina3) && (a < maxa3)) cnt++;
      a += abase;
    }
    if (cnt == 3) {
      n = i;
      break;
    }
  }
  double s = r * r * n * sin(2. * M_PI / n) / 2.;
  cout.precision(10);
  cout << s << endl;
}
