#include <bits/stdc++.h>
using namespace std;
const int white = 0, gray = 1, black = 2;
const int inf = 0x0fffffff;
const int Size = 10000;
char buffer[Size];
const double eps = 10e-6;
bool eq(double a, double b) { return fabs(a - b) < eps; }
bool lt(double a, double b) { return a < b && !eq(a, b); }
bool le(double a, double b) { return a < b || eq(a, b); }
struct Point {
  double x, y;
  Point(double x = 0., double y = 0.) : x(x), y(y) {}
};
Point operator+(const Point &a, const Point &b) {
  return Point(a.x + b.x, a.y + b.y);
}
Point operator-(const Point &a, const Point &b) {
  return Point(a.x - b.x, a.y - b.y);
}
double Cross(const Point &a, const Point &b) { return a.x * b.y - a.y * b.x; }
struct Seg {
  Point a, b;
  Seg(const Point &a = Point(), const Point &b = Point()) : a(a), b(b) {}
};
double Det(double a, double b, double c, double d) { return a * d - b * c; }
int CrossLine(const Seg &a, const Seg &b, Point &res) {
  Point p1 = a.b - a.a;
  double a1 = p1.y, b1 = -p1.x, c1 = -Cross(a.a, p1);
  Point p2 = b.b - b.a;
  double a2 = p2.y, b2 = -p2.x, c2 = -Cross(b.a, p2);
  double d = Det(a1, b1, a2, b2);
  if (eq(d, 0.)) return 0;
  double x = -Det(c1, b1, c2, b2) / d;
  double y = -Det(a1, c1, a2, c2) / d;
  res = Point(x, y);
  return 1;
}
Point operator*(const Point &a, double k) { return Point(a.x * k, a.y * k); }
double Dist(const Point &a) {
  double d = a.x * a.x + a.y * a.y;
  if (eq(d, 0.)) return 0.;
  return sqrt(d);
}
Point Norm(const Point &a) {
  double d = 1 / Dist(a);
  return a * d;
}
double gcd(double a, double b) {
  if (fabs(b) < eps) return a;
  return gcd(b, fmod(a, b));
}
double Scalar(const Point &a, const Point &b) { return a.x * b.x + a.y * b.y; }
double GetAngle(const Point &a, const Point &b) {
  return acos(Scalar(a, b) / (Dist(a) * Dist(b)));
}
double pi = acos(-1.);
int Solution(int nTest) {
  Point ar[3];
  for (int i = 0; i < 3; i++) {
    double x, y;
    scanf("%lf%lf", &x, &y);
    ar[i] = Point(x, y);
  }
  Point p01 = ar[1] - ar[0], p02 = ar[2] - ar[0];
  Point p01n(p01.y, -p01.x), p02n(p02.y, -p02.x);
  Point t1 = ar[0] + (p01 * 0.5);
  Point t2 = ar[0] + (p02 * 0.5);
  Seg m1(t1, t1 + p01n);
  Seg m2(t2, t2 + p02n);
  Point c1, c2, c3;
  if (CrossLine(m1, m2, c1) == 0) throw "exc";
  Point p12 = ar[2] - ar[1];
  Point p12n = Point(p12.y, -p12.x);
  Point t3 = ar[1] + p12 * 0.5;
  Seg m3(t3, t3 + p12n);
  CrossLine(m1, m3, c3);
  CrossLine(m2, m3, c2);
  Point c = (c1 + c2 + c3) * (1. / 3.);
  double a1 = fabs(GetAngle(ar[0] - c, ar[1] - c)),
         a2 = fabs(GetAngle(ar[0] - c, ar[2] - c));
  double a3 = fabs(GetAngle(ar[2] - c, ar[1] - c));
  for (int n = 3; n <= 100; n++) {
    double g = (2. * pi) / (double)n;
    int state = 0;
    for (int j = 1; j < n; j++) {
      if (eq((double)j * g, a1)) state++;
      if (eq((double)j * g, a2)) state++;
      if (eq((double)j * g, a3)) state++;
    }
    if (state == 3) {
      double r = Dist(c - ar[0]);
      double s1 = r * r * sin(g) / 2.;
      double s = s1 * n;
      printf("%.7lf\n", s);
      return 0;
    }
  }
  return 0;
}
int main() {
  int i = 0, n = 99999;
  while (i < n && Solution(i)) {
    i++;
  }
  return 0;
}
