#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point() { x = 0, y = 0; }
  point(double a, double b) {
    x = a;
    y = b;
  }
};
struct line {
  double k, b;
  line() { k = 0, b = 0; }
  line(point a, point bt) {
    k = (a.y - bt.y) / (a.x - bt.x);
    b = a.y - k * a.x;
  }
  line(point a, double bt) {
    k = bt;
    b = a.y - k * a.x;
  }
};
point operator*(line a, line b) {
  double ptx = (a.b - b.b) / (b.k - a.k);
  double pty = (b.k * ptx) + b.b;
  return point(ptx, pty);
}
double operator-(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double calc(point A, point B, point C) {
  double a = B - C;
  double b = A - C;
  double c = A - B;
  return acos((b * b + c * c - a * a) / (2 * b * c));
}
int main() {
  point a, b, c;
  cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;
  line tx, ty, l1, l2;
  if (abs(a.y - b.y) < 0.000001) swap(b, c);
  if (abs(c.y - b.y) < 0.000001) swap(a, b);
  tx = line(a, b);
  ty = line(b, c);
  if (abs(a.x - b.x) < 0.000001) {
    l1.b = (a.y + b.y) / 2;
    l2 = line(point((b.x + c.x) / 2, (b.y + c.y) / 2), -1 / ty.k);
  } else if (abs(b.x - c.x) < 0.000001) {
    l1 = line(point((a.x + b.x) / 2, (a.y + b.y) / 2), -1 / tx.k);
    l2.b = (b.y + c.y) / 2;
  } else {
    l1 = line(point((a.x + b.x) / 2, (a.y + b.y) / 2), -1 / tx.k);
    l2 = line(point((b.x + c.x) / 2, (b.y + c.y) / 2), -1 / ty.k);
  }
  point O = l1 * l2;
  double p1 = calc(O, a, b);
  double p2 = calc(O, b, c);
  for (int i = 3; i <= 100; i++) {
    double pec = 2 * acos(-1) / i;
    if (abs(round(p1 / pec) - p1 / pec) < 0.00001 &&
        abs(round(p2 / pec) - p2 / pec) < 0.00001) {
      printf("%.6f", 0.5 * sin(2 * acos(-1) / i) * i * (O - a) * (O - a)),
          exit(0);
    }
  }
}
