Poj_1329
The question is mainly about finding out the outer heart of the triangle, that is, the point of the vertical line in each side. After the formula is derived, it can be calculated directly.
# Include <stdio. h>
# Include < String . H>
# Include <math. h>
# Define Zero 1e-8
Double X3, Y3, X4, Y4, X5, Y5;
Double DCMP ( Double X)
{
If (FABS (x) <zero)
Return 0 ;
If (X < 0 )
Return - 1 ;
Return 1 ;
}
Char Sign ( Double X)
{
Return X < 0 ?' - ' : ' + ' ;
}
Void Solve ()
{
Double X1, Y1, X2, Y2, K1, K2, X, Y, R, A1, A2, A3;
If (DCMP (Y3-Y4) = 0 )
{
X1 = (X3 + X4 )/ 2 , Y1 = Y3;
K2 = (X4-X5)/(Y5-Y4 );
X2 = (X4 + X5 )/ 2 , Y2 = (Y4 + Y5 )/ 2 ;
X = x1, y = k2 * (x1-X2) + y2;
}
Else
{
If (DCMP (Y4-Y5) = 0 )
{
X2 = (X4 + X5 )/ 2 , Y2 = Y4;
K1 = (X3-X4)/(Y4-Y3 );
X1 = (X3 + X4 )/2 , Y1 = (Y3 + Y4 )/ 2 ;
X = x2, y = K1 * (x2-X1) + Y1;
}
Else
{
X1 = (X3 + X4 )/ 2 , Y1 = (Y3 + Y4 )/ 2 ;
K1 = (X3-X4)/(Y4-Y3 );
X2 = (X4 + X5 )/ 2 , Y2 = (Y4 + Y5 )/ 2 ;
K2 = (X4-X5)/(Y5-Y4 );
X = (Y2-Y1 + K1 * x1-K2 * x2)/(K1-K2 );
Y = K1 * (X-X1) + Y1;
}
}
R = SQRT (X-X3) * (X-X3) + (Y-Y3) * (Y-Y3 ));
Printf ( " (X % C %. 3lf) ^ 2 + (Y % C %. 3lf) ^ 2 = %. 3lf ^ 2 \ n " , Sign (-x), FABS (x), sign (-y), FABS (Y), R );
A1 = (- 2 ) * X, a2 = (- 2 ) * Y, A3 = x * x + y * Y-R * R;
Printf ( " X ^ 2 + y ^ 2% C %. 3lfx % C %. 3lfy % C %. 3lf = 0 \ n " , Sign (A1), FABS (A1), sign (A2), FABS (A2), sign (A3), FABS (A3 ));
}
Int Main ()
{
While (Scanf ( " % Lf " , & X3, & Y3, & X4, & Y4, & X5, & Y5) = 6 )
{
Solve ();
Printf ( " \ N " );
}
Return 0 ;
}