import
java.util.*;
class
Point {
double
x, y;
Point() {
x =
0
;
y =
0
;
}
Point(
double
X,
double
Y) {
x = X;
y = Y;
}
}
public
class
Main {
static
double
getDistance(Point P1, Point P2) {
double
dx = P1.x - P2.x;
double
dy = P1.y - P2.y;
return
Math.sqrt(dx * dx + dy * dy);
}
static
Point getMid1(Point P1, Point P2) {
double
xmid1 = P1.x + (P2.x - P1.x) /
3.0
;
double
ymid1 = P1.y + (P2.y - P1.y) /
3.0
;
return
new
Point(xmid1, ymid1);
}
static
Point getMid2(Point P1, Point P2) {
double
xmid2 = P2.x - (P2.x - P1.x) /
3.0
;
double
ymid2 = P2.y - (P2.y - P1.y) /
3.0
;
return
new
Point(xmid2, ymid2);
}
static
double
solve(Point A, Point B, Point C, Point D) {
int
cnt =
200
;
while
(cnt-- >
0
) {
Point ABmid1 = getMid1(A, B);
Point ABmid2 = getMid2(A, B);
Point CDmid1 = getMid1(C, D);
Point CDmid2 = getMid2(C, D);
double
d1 = getDistance(ABmid1, CDmid1);
double
d2 = getDistance(ABmid2, CDmid2);
if
(d1 == d2) {
A = ABmid1;
B = ABmid2;
C = CDmid1;
D = CDmid2;
}
else
if
(d1 < d2) {
B = ABmid2;
D = CDmid2;
}
else
{
A = ABmid1;
C = CDmid1;
}
}
return
getDistance(A, C);
}
public
static
void
main(String[] args) {
Point A =
new
Point(
0
,
0
);
Point B =
new
Point(
5
,
5
);
Point C =
new
Point(
10
,
10
);
Point D =
new
Point(
6
,
6
);
System.out.printf(
"%.6f%n"
, solve(A, B, C, D));
}
}