Int3rs3ct1ng - T3rm1n4d0
Thursday, August 13, 2009 2:25:26 AM
Bueno este es otro de los retos que hemos trabajado, es un reto no muy dificil a nivel de programacion, pero si tal vez con sierto grado de dificultad en el analisis.
Enunciado: http://sophia.javeriana.edu.co/maratones/programacion/5.JaverianaPolitecnico/contest/D-IntersectingLines.pdf
Entrada:http://sophia.javeriana.edu.co/maratones/programacion/5.JaverianaPolitecnico/contest/D.in
Salida:http://sophia.javeriana.edu.co/maratones/programacion/5.JaverianaPolitecnico/contest/D.ans
Enunciado: http://sophia.javeriana.edu.co/maratones/programacion/5.JaverianaPolitecnico/contest/D-IntersectingLines.pdf
Entrada:http://sophia.javeriana.edu.co/maratones/programacion/5.JaverianaPolitecnico/contest/D.in
Salida:http://sophia.javeriana.edu.co/maratones/programacion/5.JaverianaPolitecnico/contest/D.ans
public class Intersecting_Lines {
private DecimalFormat df = new DecimalFormat("0.00");
private float [] puntos = new float [8];
public static void main(String[] args) throws Exception {
Intersecting_Lines l = new Intersecting_Lines();
l.leer();
}
private void leer() throws Exception {
File f = new File ("lines.in");
BufferedReader entrada = new BufferedReader(new FileReader (f));
String texto=entrada.readLine();
int N = Integer.parseInt(texto);
System.out.println("INTERSECTING LINES OUTPUT");
while ((texto=entrada.readLine())!=null){
validar(asignar(texto));
}
System.out.println("END OF OUTPUT");
}
private void validar(float[] puntos) {
float m1 = (puntos [3]-puntos [1])/(puntos [2]-puntos[0]);
float m2 = (puntos [7]-puntos [5])/(puntos [6]-puntos[4]);
if (m1==m2){
//System.out.println("NONE");
if(funcion(m1,m2)){
System.out.println("LINE");
}else{
System.out.println("NONE");
}
}else{
if ((String.valueOf(m1).equals("Infinity")||String.valueOf(m1).equals("-Infinity"))&&(String.valueOf(m2).equals("Infinity")||String.valueOf(m2).equals("-Infinity"))){
System.out.println("NONE");
}else if (puntos[0]==puntos[2]&&puntos[5]==puntos[7]){ // No hay Pendiente
System.out.println("POINT "+df.format(puntos[0])+" "+df.format(puntos[5]));
}else if (puntos[0]==puntos[2]&&puntos[5]!=puntos[7]){
System.out.println(funcion2(puntos[0],m2));
}else if (puntos[0]!=puntos[2]&&puntos[5]==puntos[7]){
funcion2(puntos[5],m1);
}else{
//System.out.println(m1+" "+m2);
System.out.println(funcion3(m1,m2));
}
}
}
private String funcion3(float m1, float m2) {
float b1=(((puntos[0])*(-1))*m1)+((puntos[1]));
float b2=(((puntos[4])*(-1))*m2)+((puntos[5]));
float x= (b2-b1)/(m1-m2);
float y=(m2*x)+b2;
return "POINT "+df.format(x)+" "+df.format(y);
}
private String funcion2(float a, float m2) {
String f=String.valueOf(a);
String g=String.valueOf(m2)+"X"+String.valueOf((((puntos[4])*(-1))*m2)+((puntos[5])));
float resp=(m2*a)+(((puntos[4])*(-1))*m2)+((puntos[5]));
return "POINT "+df.format(f)+" "+df.format(String.valueOf(resp));
}
private boolean funcion(float m1, float m2) {
String f=String.valueOf(m1)+"X"+String.valueOf((((puntos[0])*(-1))*m1)-((puntos[1])*(-1)));
String g=String.valueOf(m2)+"X"+String.valueOf((((puntos[4])*(-1))*m2)-((puntos[5])*(-1)));
if (f.equals(g)){
return true;
}
return false;
}
private float [] asignar(String texto) {
StringTokenizer tokens = new StringTokenizer(texto," ");
int i =0;
while (tokens.hasMoreTokens()){
puntos[i]=Float.parseFloat(tokens.nextToken());
i++;
}
return puntos;
}
}






