04 Abril, 2020, 12:06 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Puedes practicar LATEX con el cómodo editor de Latex online
 
 
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Ejercicio de intersección de dos rectas (JAVA)  (Leído 1472 veces)
0 Usuarios y 1 Visitante están viendo este tema.
giulichajari
Junior
**

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 15

Se busca gente que piense..


Ver Perfil
« : 07 Abril, 2015, 04:01 »

Tengo un ejercicio de la universidad que consiste en crear una clase punto, y una clase linea. La linea se compone de 2 puntos (en realidad marca el inicio y el fin). Hay un metodo para dar longitud a partir de los cuatro valores decimales, que ya lo hice:

Código:
public float DarLongitud () {

       return (float) Math.sqrt (((punto2.getx() - punto1.getx()) * (punto2.getx() - punto1.getx())) + (( punto2.gety() - punto1.gety() ) * (punto2.gety() - punto1.gety())));

    }

Simplemente retorna la longitud de la  hipotenusa del triangulo rectangulo que se forma con los 2 puntos.

Ahora el problema es el metodo para hallar la interseccion si es que existe entre 2 lineas. Como esta planteado el ejercicio al crear las lineas tengo 4 puntos con (x;y).

Lo que hice fue hallar la ecuacion de la recta que pasa por 2 puntos, este es la pendiente y la ordenada al origen:

Código:
public float PendientedeLinea(Punto punto1, Punto punto2){
        //puntos que forman la linea y diferencia
 
        float deltax;
        float deltay;
        float pendiente;
          // hallar pendiente de la recta de los puntos
        deltax = punto2.getx() - punto1.getx();
        deltay = punto2.gety() - punto1.gety();
        //dividir deltax/deltay
        pendiente = deltay/deltax;
        return pendiente;
    }

OO:

Código:
public float OorigenLinea(Punto punto1, Punto punto2){
        float deltax;
        float deltay;
        float oorigen;
        float pendiente;
          // hallar ecuacion de la recta de los puntos
        deltax = punto2.getx() - punto1.getx();
        deltay = punto2.gety() - punto1.gety();
        //dividir deltax/deltay
        pendiente = deltay/deltax;
        oorigen= pendiente * punto1.getx() - punto1.gety();
        return oorigen;
    }

Y el metodo intersectar propiamente dicho:
Código:
public float Intersectar (Linea L2) {
       
        float aux1;
        float aux2;
        float aux3;
        float aux4;
        float aux5;
        float aux6;
        float aux7;
        float aux8;
       //obtnego pendientes y oo de las rectas
        aux1 = this.PendientedeLinea(punto1, punto2);
       
        aux2 = this.OorigenLinea(punto1, punto2);
       
        aux3 = L2.PendientedeLinea(punto1, punto2);
        aux4 = L2.OorigenLinea(punto1, punto2);
        //agrupo x con x y oo con oo
        aux5 = aux1 + (aux3 * -1);
           aux6 = aux2 + (aux4 * -1);
           // hayo x (valor de x del punto)
           aux7 = aux5/aux6;
           //sustituyo x en una ecuacion (valor de y del punto)
           aux8 = aux2 / (aux1 * aux7);
           //creo el punto
        Punto puntoi = new Punto(aux7,aux8);
        return aux2;


    }


Tengo 8 variables float y los comentarios les dicen el proceso. si retorno aux2 o aux1 me da bien.

Pero si retorno el punto me dice NaN: not a number.

Cuerpo principal:

Código:
public static void main (String [ ] args) {

   //Aquí las instrucciones de inicio y control del programa

       System.out.println ("Empezamos la ejecución del programa \n");

       Punto punto1 = new Punto(4,7);
       Punto punto2 = new Punto(-1,-3);
       Punto punto3 = new Punto(5,3);
       Punto punto4 = new Punto(9,4);
   
       Linea Linea1 = new Linea (punto1,punto2);
       Linea Linea2 = new Linea (punto3,punto4);

       System.out.println (Linea1.DarTexto());
       System.out.println (Linea1.Intersectar(Linea2));
       System.out.println ("La longitud de la linea es: " + Linea1.DarLongitud());


    } //Cierre del main
 

}

Que me pueden decir...
En línea
luis
Pleno*
*****

Karma: +1/-0
Desconectado Desconectado

Sexo: Masculino
Uruguay Uruguay

Mensajes: 304


Ver Perfil
« Respuesta #1 : 07 Abril, 2015, 08:14 »


hola,

de java me acuerdo bien poco, pero lo primero que se me ocurre es que en DarLongitud los nombres punto1 y punto2 deberían estar subordinados a this.

después trato de mirar el código con más detalle, pero me parece muy complicado. parece que haces las mismas cosas demasiadas veces.

saludos
En línea
luis
Pleno*
*****

Karma: +1/-0
Desconectado Desconectado

Sexo: Masculino
Uruguay Uruguay

Mensajes: 304


Ver Perfil
« Respuesta #2 : 07 Abril, 2015, 08:31 »

Y el metodo intersectar propiamente dicho:
Código:
public float Intersectar (Linea L2) {
       
        float aux1;
        float aux2;
...
           //creo el punto
        Punto puntoi = new Punto(aux7,aux8);
        return aux2;
    }

Tengo 8 variables float y los comentarios les dicen el proceso. si retorno aux2 o aux1 me da bien.

Pero si retorno el punto me dice NaN: not a number.

declaraste que la función devuelve un float; y eso es lo que son aux2 y aux1. pero puntoi no es un float, es un Punto. si querés que devuelva un Punto, declarale que querés que devuelva un Punto.

igualmente, me da la sensación que tu código es innecesariamente complicado.

saludos

En línea
luis
Pleno*
*****

Karma: +1/-0
Desconectado Desconectado

Sexo: Masculino
Uruguay Uruguay

Mensajes: 304


Ver Perfil
« Respuesta #3 : 07 Abril, 2015, 08:48 »


me parece que aún no comprendes la idea de las clases. voy a suponer que PendientedeLinea es un método de la clase Linea. en ese caso, no tienen sentido los argumentos; supongo que el código siguiente

Código:
public float PendientedeLinea(Punto punto1, Punto punto2){
        //puntos que forman la linea y diferencia
 
        float deltax;
        float deltay;
        float pendiente;
          // hallar pendiente de la recta de los puntos
        deltax = punto2.getx() - punto1.getx();
        deltay = punto2.gety() - punto1.gety();
        //dividir deltax/deltay
        pendiente = deltay/deltax;
        return pendiente;
    }

debería escribirse (suponiendo, claro, que punto1 y punto2 son los campos esperables de la clase Linea)

Código:
public float PendientedeLinea(){
        //puntos que forman la linea y diferencia
 
        float deltax;
        float deltay;
        float pendiente;
          // hallar pendiente de la recta de los puntos
        deltax = this.punto2.getx() - this.punto1.getx();
        deltay = this.punto2.gety() - this.punto1.gety();
        //dividir deltax/deltay
        pendiente = deltay/deltax;
        return pendiente;
    }

de igual forma se procedería con OorigenLinea.

si no le erro a lo que entendí de tu código y lo que recuerdo de java, el fragmento
Código:
public float Intersectar (Linea L2) {
       
        float aux1;
        float aux2;
        float aux3;
        float aux4;
        float aux5;
        float aux6;
        float aux7;
        float aux8;
       //obtnego pendientes y oo de las rectas
        aux1 = this.PendientedeLinea(punto1, punto2);
       
        aux2 = this.OorigenLinea(punto1, punto2);
       
        aux3 = L2.PendientedeLinea(punto1, punto2);
        aux4 = L2.OorigenLinea(punto1, punto2);
        //agrupo x con x y oo con oo
        aux5 = aux1 + (aux3 * -1);
           aux6 = aux2 + (aux4 * -1);
           // hayo x (valor de x del punto)
           aux7 = aux5/aux6;
           //sustituyo x en una ecuacion (valor de y del punto)
           aux8 = aux2 / (aux1 * aux7);
           //creo el punto
        Punto puntoi = new Punto(aux7,aux8);
        return aux2;
    }

podría escribirse de forma más sencilla
Código:
public float Intersectar (Linea L2) {
       
        float aux1;
        float aux2;
        float aux3;
        float aux4;
        float aux5;
        float aux6;
        float aux7;
        float aux8;
       //obtnego pendientes y oo de las rectas
        aux1 = this.PendientedeLinea();
       
        aux2 = this.OorigenLinea();
       
        aux3 = L2.PendientedeLinea();
        aux4 = L2.OorigenLinea();
        //agrupo x con x y oo con oo
        aux5 = aux1 + (aux3 * -1);
           aux6 = aux2 + (aux4 * -1);
           // hayo x (valor de x del punto)
           aux7 = aux5/aux6;
           //sustituyo x en una ecuacion (valor de y del punto)
           aux8 = aux2 / (aux1 * aux7);
           //creo el punto
        Punto puntoi = new Punto(aux7,aux8);
        return aux2;
    }

finalmente, hay cosas que no entiendo. por qué escribiste aux2 + (aux4 * -1) en lugar de aux2 - aux4? posiblemente haya cosas que resolvés de forma más complicada de lo necesaria. quizá pueda volver más tarde sobre esto.

saludos

 
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC XHTML 1.0 válido! CSS válido!