El link del Problema se encuentra en el siguiente enlace
import java.util.Scanner;
/**
* 5514 - Circle Through Three Points [http://livearchive.onlinejudge.org]
* 190 - Circle Through Three Points [http://uva.onlinejudge.org]
*
* @author BreakDark
* @version 1.1 beta
*/
// ACEPTADO!!! xD
public class Main {
public static void main(String[] args) {
Scanner Lee; // para leer los datos de entrada
double Ax, Ay, Bx, By, Cx, Cy; // para las coordenadas de los puntos
double h = 0, k = 0, r = 0, c = 0, d = 0, e = 0; // para los datos que
// se mostraran
double[][] C = new double[3][3]; // para sacar el determinante
double[][] D = new double[3][3];
double[][] E = new double[3][3];
double[][] dis = new double[3][3];
double aux; // un auxiliar para ahorrar operaciones
String linea; // para la linea que se mostrara al final
// AQUI INICIA EL PROGRAMA
Lee = new Scanner(System.in);
while(Lee.hasNext()){
Ax = Double.parseDouble(Lee.next());
Ay = Double.parseDouble(Lee.next());
Bx = Double.parseDouble(Lee.next());
By = Double.parseDouble(Lee.next());
Cx = Double.parseDouble(Lee.next());
Cy = Double.parseDouble(Lee.next());
// creamos las matriz discriminante
dis[0][0] = Ax;
dis[0][1] = Ay;
dis[0][2] = 1;
dis[1][0] = Bx;
dis[1][1] = By;
dis[1][2] = 1;
dis[2][0] = Cx;
dis[2][1] = Cy;
dis[2][2] = 1;
// copiamos antes de modificar las matrices
C = copia(dis);
D = copia(dis);
E = copia(dis);
// creamos la matriz D
C[0][0] = -(Ax * Ax + Ay * Ay);
C[1][0] = -(Bx * Bx + By * By);
C[2][0] = -(Cx * Cx + Cy * Cy);
// creamos la matriz E
D[0][1] = -(Ax * Ax + Ay * Ay);
D[1][1] = -(Bx * Bx + By * By);
D[2][1] = -(Cx * Cx + Cy * Cy);
// creamos la matriz F
E[0][2] = -(Ax * Ax + Ay * Ay);
E[1][2] = -(Bx * Bx + By * By);
E[2][2] = -(Cx * Cx + Cy * Cy);
// hallamos las soluciones
aux = det(dis);
c = det(C) / aux;
d = det(D) / aux;
e = det(E) / aux;
h = c / 2;// -c/2;
k = d / 2;// -d/2;
r = Math.sqrt(h * h + k * k - e);
// aqui mostramos el resultado
// formato 1
// para h
linea = "(x ";
if(h >= 0)
linea += String.format("+ %.3f", h);
else
linea += String.format("- %.3f", Math.abs(h));
linea += ")^2 + (y ";
// para k
if(k >= 0)
linea += String.format("+ %.3f", k);
else
linea += String.format("- %.3f", Math.abs(k));
linea += ")^2 = ";
// para r
linea += String.format("%.3f^2\n", r);
System.out.print(linea.replace(',', '.'));
// formato 2
linea = "x^2 + y^2 ";
// para c
if(c >= 0)
linea += String.format("+ %.3fx ", c);
else
linea += String.format("- %.3fx ", Math.abs(c));
// para d
if(d >= 0)
linea += String.format("+ %.3fy ", d);
else
linea += String.format("- %.3fy ", Math.abs(d));
// para e
if(e >= 0)
linea += String.format("+ %.3f = 0\n", e);
else
linea += String.format("- %.3f = 0\n", Math.abs(e));
System.out.print(linea.replace(',', '.'));
// if(Lee.hasNext())
System.out.println();
}
}
/**
* Realiza una copia de la matriz mat de 3 por 3
*
* @author BreakDark
* @param mat
* matriz a copiar
* @return matriz con los mismos elementos de mat
*/
private static double[][] copia(double[][] mat) {
double[][] res = new double[3][3];
byte i, j;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
res[i][j] = mat[i][j];
return res;
}
/**
* Funcion que halla el determinante de una matriz de 3 por 3
*
* @author BreakDark
* @param mat
* Es una matriz de 3 por 3
* @return el determinante de mat
*/
private static double det(double[][] mat) {
return (mat[0][0] * mat[1][1] * mat[2][2] + mat[0][1] * mat[1][2] * mat[2][0] + mat[0][2] * mat[1][0] * mat[2][1] - mat[0][0] * mat[1][2]
* mat[2][1] - mat[0][1] * mat[1][0] * mat[2][2] - mat[0][2] * mat[1][1] * mat[2][0]);
}
}
|
No comments:
Post a Comment