#include <bits/stdc++.h>
using namespace std;
const int INF = 0x7fffffff;
const double eps = 1e-3;
int dcmp(double x) {
  if (fabs(x) < eps)
    return 0;
  else
    return x < 0 ? -1 : 1;
}
const double PI = acos(-1);
const double TWO_PI = PI * 2;
double NormalizeAngle(double rad, double center = PI) {
  return rad - TWO_PI * floor((rad + PI - center) / TWO_PI);
}
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);
}
Point operator*(const Point& A, double p) { return Point(A.x * p, A.y * p); }
Point operator/(const Point& A, double p) { return Point(A.x / p, A.y / p); }
bool operator<(const Point& a, const Point& b) {
  return a.x < b.x || (a.x == b.x && a.y < b.y);
}
bool operator==(const Point& a, const Point& b) {
  return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}
double angle(Point v) { return atan2(v.y, v.x); }
double Dot(const Point& A, const Point& B) { return A.x * B.x + A.y * B.y; }
double Dist(const Point& A, const Point& B) {
  return sqrt((A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y));
}
double Dist2(const Point& A, const Point& B) {
  return (A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y);
}
double Cross(const Point& A, const Point& B) { return A.x * B.y - A.y * B.x; }
double Length(Point A) { return sqrt(Dot(A, A)); }
double Angle(Point A, Point B) { return atan2(Cross(A, B), Dot(A, B)); }
double Area2(Point A, Point B, Point C) { return Cross(B - A, C - A); }
Point Rotate(Point A, double rad) {
  return Point(A.x * cos(rad) - A.y * sin(rad),
               A.x * sin(rad) + A.y * cos(rad));
}
Point Normal(const Point& A) {
  double L = Length(A);
  return Point(-A.y / L, A.x / L);
}
struct Line {
  Point p;
  Point v;
  double ang;
  Line() {}
  Line(Point p, Point v) : p(p), v(v) { ang = atan2(v.y, v.x); }
  bool operator<(const Line& L) const { return ang < L.ang; }
  Point point(double t) { return p + v * t; }
};
bool OnLeft(const Line& L, const Point& p) { return Cross(L.v, p - L.p) > 0; }
Point GetLineIntersection(const Line& a, const Line& b) {
  Point u = a.p - b.p;
  double t = Cross(b.v, u) / Cross(a.v, b.v);
  return a.p + a.v * t;
}
double x, y;
vector<Point> V;
int main(void) {
  cin.sync_with_stdio(false);
  for (int i = (0); i < (3); i++) {
    cin >> x >> y;
    V.push_back(Point(x, y));
  }
  Line l1 = Line((V[0] + V[1]) / 2, Normal(V[1] - V[0]));
  Line l2 = Line((V[1] + V[2]) / 2, Normal(V[2] - V[1]));
  Point C = GetLineIntersection(l1, l2);
  double r = Length(C - V[1]);
  double a[5];
  a[0] = fabs(Angle(V[1] - C, V[0] - C)) / (2 * PI);
  a[1] = fabs(Angle(V[2] - C, V[1] - C)) / (2 * PI);
  a[2] = fabs(Angle(V[0] - C, V[2] - C)) / (2 * PI);
  cerr << a[0] << ' ' << a[1] << ' ' << a[2] << endl;
  int n;
  for (int t = (3); t < (101); t++) {
    int good = 0;
    for (int i = (0); i < (3); i++) {
      double b1 = a[i] * t;
      double c1 = floor(b1);
      if (dcmp(b1 - c1) == 0 || dcmp(b1 - c1 - 1) == 0) {
        good++;
      }
      if (t == 38) {
        cerr << b1 << ' ' << c1 << endl;
      }
    }
    if (good == 3) {
      n = t;
      break;
    }
  }
  cerr << "n = " << n << ", r = " << r << endl;
  double ans = r * r * sin(2 * PI / n) * n / 2.0;
  cout << fixed << setprecision(15) << ans << endl;
  return 0;
}
