using
System;
using
System.Collections.Generic;
class
GFG
{
static
double
pi = 3.14159265359;
static
double
fmod(
double
a,
double
b)
{
int
result = (
int
) Math.Floor(a / b);
return
a - result * b;
}
static
double
gcd(
double
x,
double
y)
{
return
Math.Abs(y) < 1e-4 ? x : gcd(y, fmod(x, y));
}
static
double
min_area_of_polygon(
double
Ax,
double
Ay,
double
Bx,
double
By,
double
Cx,
double
Cy)
{
double
a, b, c, Radius, Angle_A, Angle_B, Angle_C,
semiperimeter, n, area;
/// points a, b, c represents the
a = Math.Sqrt((Bx - Cx) * (Bx - Cx) +
(By - Cy) * (By - Cy));
b = Math.Sqrt((Ax - Cx) * (Ax - Cx) +
(Ay - Cy) * (Ay - Cy));
c = Math.Sqrt((Ax - Bx) * (Ax - Bx) +
(Ay - By) * (Ay - By));
semiperimeter = (a + b + c) / 2;
double
area_triangle = Math.Sqrt(semiperimeter *
(semiperimeter - a) *
(semiperimeter - b) *
(semiperimeter - c));
Radius = (a * b * c) / (4 * area_triangle);
Angle_A = Math.Acos((b * b + c * c - a * a) /
(2 * b * c));
Angle_B = Math.Acos((a * a + c * c - b * b) /
(2 * a * c));
Angle_C = Math.Acos((b * b + a * a - c * c) /
(2 * b * a));
n = pi / gcd(gcd(Angle_A, Angle_B), Angle_C);
area = (n * Radius * Radius *
Math.Sin((2 * pi) / n)) / 2;
return
area;
}
static
void
Main()
{
double
Ax, Ay, Bx, By, Cx, Cy;
Ax = 0.00;
Ay = 0.00;
Bx = 1.00;
By = 1.00;
Cx = 0.00;
Cy = 1.00;
Console.WriteLine(String.Format(
"{0:0.00}"
, min_area_of_polygon(Ax, Ay,
Bx, By,
Cx, Cy)));
}
}