Foros del Web » Programación para mayores de 30 ;) » Java »

Union e interseccion de rectangulos en java

Estas en el tema de Union e interseccion de rectangulos en java en el foro de Java en Foros del Web. Hola amigos de nuevo molestandolos espero que me puedan ayudar, bueno nos dejaron crear una clase rectangulo a patir de dos clases linea y punto, ...
  #1 (permalink)  
Antiguo 14/10/2013, 19:28
Avatar de ninga  
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Union e interseccion de rectangulos en java

Hola amigos de nuevo molestandolos espero que me puedan ayudar, bueno nos dejaron crear una clase rectangulo a patir de dos clases linea y punto, ya la e echo casi toda solo me falta la union interseccion y rotarlo si me ayudan se los agradecere.

Codigo linea:
Código Java:
Ver original
  1. /**
  2.  * Linea.java
  3. */
  4. public class Linea{
  5.   private Punto p1;
  6.   private Punto p2;
  7.  
  8.   public Linea(){
  9.     this(new Punto(0,0),new Punto(1,1));
  10.   }
  11.  
  12.   public Linea (Punto p1Ini, Punto p2Ini) {
  13.     if(!p1Ini.equals(p2Ini)){
  14.          p1 = p1Ini;
  15.          p2 = p2Ini;
  16.     }
  17.     else{
  18.       p1 = new Punto(3,5);
  19.       p2 = new Punto(4,6);
  20.     }
  21.   }
  22.  
  23.   public Linea(Linea l) {
  24.     p1 = l.p1;
  25.     p2 = l.p2;
  26.   }
  27.  
  28.   public Punto getP1(){
  29.    return p1;
  30.   }
  31.  
  32.   public Punto getP2(){
  33.    return p2;
  34.   }
  35.  
  36.   public String ecuacion(){
  37.     if (p1.getY() == p2.getY())
  38.       return "y = " + p1.getY();  //Recta paralela al eje x
  39.  
  40.     if (p1.getX() == p2.getX())
  41.       return "x = " + p1.getX();  //Recta paralela al eje y
  42.  
  43.     double m = pendiente();
  44.     double b = ordenada();
  45.     return (b > 0) ? "y = " + m + "x + " + b
  46.                    : "y = " + m + "x " + b;
  47.   }
  48.  
  49.   public double pendiente() {
  50.     double divisor = p2.getX() - p1.getX();
  51.  
  52.     return (divisor != 0) ?
  53.                   (p2.getY() - p1.getY())/divisor
  54.                   : Double.POSITIVE_INFINITY;            //Recta paralela al eje Y
  55.   }
  56.  
  57.  
  58.   public double ordenada() {
  59.     return p1.getX() == p2.getX()?
  60.                          Double.POSITIVE_INFINITY
  61.                          : p1.getY() - pendiente()*p1.getX();
  62.   }
  63.  
  64.  
  65.   public boolean contiene(Punto p) {
  66.     return p.estanAlineados(p1,p2);
  67.   }
  68.  
  69.   public boolean equals(Linea l1) {
  70.     return pendiente() == l1.pendiente() && ordenada() == l1.ordenada();
  71.   }
  72.  
  73.   public boolean esParalela(Linea l1) {
  74.     return pendiente () == l1.pendiente();
  75.   }
  76.  
  77.   public boolean esPerpendicular(Linea l1) {
  78.     double m = pendiente();
  79.     double m1 = l1.pendiente();
  80.     final double INFINITO = Double.POSITIVE_INFINITY;
  81.  
  82.     if (m == 0 || m1 == 0 || m == INFINITO || m1 == INFINITO){
  83.       return ((m == 0 && m1 == INFINITO) || (m1 == 0 && m == INFINITO))
  84.         ? true : false;
  85.     }
  86.  
  87.     return m == -1/m1;
  88.   }
  89.  
  90.   public Punto interseccion(Linea l1) {
  91.       int nuevaX, nuevaY;
  92.       if (esParalela(l1)){
  93.         nuevaX = nuevaY = (int)Double.POSITIVE_INFINITY;
  94.       }
  95.       else {
  96.         nuevaX = (int)(ordenada()- l1.ordenada())/(int)(l1.pendiente() - pendiente());
  97.         nuevaY = (int)(pendiente()*nuevaX + ordenada());
  98.       }
  99.       return new Punto(nuevaX, nuevaY);
  100.   }  
  101. }
Codiglo punto:
Código Java:
Ver original
  1. /**
  2.  * Punto.java
  3.  */
  4. public class Punto {
  5.    private int x;      // Coordenada x
  6.    private int y;      // Coordenada y
  7.  
  8.   public Punto() {
  9.     this(0,0);
  10.   }
  11.  
  12.   public Punto(int x, int y) {
  13.     this.x = x; //setX(x);
  14.     this.y = y; //setY(y);
  15.   }
  16.  
  17.   public Punto(Punto p) {
  18.     x = p.x; //p.getX();
  19.     y = p.y; //p.getY();
  20.   }
  21.  
  22.   /**
  23.    * Asigna valor a la coordenada x del punto.
  24.    * @param int nuevo valor para la coordenada x
  25.    */
  26.   public void setX(int nuevaX) {
  27.     x = nuevaX;
  28.   }
  29.  
  30.   /**
  31.    * Asigna valor a la coordenada y del punto.
  32.    * @param int nuevo valor para la coordenada y.
  33.    */
  34.   public void setY(int nuevaY) {
  35.     y = nuevaY;
  36.   }
  37.  
  38.   public int getX() {
  39.     return x;
  40.   }
  41.  
  42.   public int getY() {
  43.     return y;
  44.   }
  45.  
  46.   public void desplazar(int deltaX, int deltaY) {
  47.     x += deltaX; // x = x + deltaX;
  48.     y += deltaY;
  49.   }
  50.  
  51.   public double distancia(Punto p) {
  52.     //Math.pow(x-p.x,2) + Math.pow(y-p.y,2)
  53.     return Math.sqrt((double)((x-p.x)*(x-p.x) +
  54.                               (y-p.y)*(y-p.y)));
  55.   }
  56.  
  57.   public boolean estanAlineados(Punto p1, Punto p2) {
  58.     return (y - p1.y)*(p2.x - p1.x) == (p2.y - p1.y)*(x -p1.x);
  59.   }
  60.  
  61.   public boolean equals(Punto p) {
  62.     return x == p.x && y == p.y;
  63.   }
  64.  
  65.   public String toString() {
  66.     return "(" + x + "," + y + ")";
  67.   }
  68. }

Codigo Rectangulo:
Código Java:
Ver original
  1. import javax.swing.JOptionPane;
  2.  
  3. public class Rectangulo {
  4.  
  5.     private Linea L1;
  6.     private Linea L2;
  7.     private Linea L3;
  8.     private Linea L4;
  9.  
  10.     /**
  11.      * Constructor del rectangulo inicial formado por los puntos
  12.      */
  13.     public Rectangulo() {
  14.         Punto p1;
  15.         Punto p2;
  16.         Punto p3;
  17.         Punto p4;
  18.         p1 = new Punto(20, 20);
  19.         p2 = new Punto(200, 20);
  20.         p3 = new Punto(20, 150);
  21.         p4 = new Punto(200, 150);
  22.         L1 = new Linea(p1, p2);
  23.         L2 = new Linea(p3, p4);
  24.         L3 = new Linea(p1, p3);
  25.         L4 = new Linea(p2, p4);
  26.     }
  27.  
  28.     /**
  29.      * Constructor de un rectangulo que recibe como parametros cuatro lineas.
  30.      * @param a Recibe una linea de la clase Linea.java.
  31.      * @param b Recibe una linea de la clase Linea.java.
  32.      * @param c Recibe una linea de la clase Linea.java.
  33.      * @param d Recibe una linea de la clase Linea.java.
  34.      */
  35.     public Rectangulo(Linea a, Linea b, Linea c, Linea d) {
  36.         L1 = a;
  37.         L2 = b;
  38.         L3 = c;
  39.         L4 = d;
  40.     }
  41.  
  42.     /**
  43.      * Costructor de un rectangulo a patir de otro(costructor copia).
  44.      * @param r Recibe un objeto de la clase Rectangulo.java.
  45.      */
  46.     public Rectangulo(Rectangulo r) {
  47.         L1 = r.L1;
  48.         L2 = r.L2;
  49.         L3 = r.L3;
  50.         L4 = r.L4;
  51.     }
  52.     /**
  53.      * Metodo que determina el lado A del rectangulo
  54.      * @return double El primer lado del rectangulo
  55.      */
  56.     public double ladoA() {
  57.         return L1.getP1().distancia(L1.getP2());
  58.  
  59.     }
  60.  
  61.     /**
  62.      * Metodo que determina el lado B del rectangulo
  63.      * @return double El segundo lado del rectangulo
  64.      */
  65.     public double ladoB() {
  66.         return L2.getP1().distancia(L2.getP2());
  67.     }
  68.  
  69.     /**
  70.      * Metodo que determina el lado C del rectangulo
  71.      * @return double El tercer lado del rectangulo
  72.      */
  73.     public double ladoC() {
  74.         return L3.getP1().distancia(L3.getP2());
  75.     }
  76.  
  77.     /**
  78.      * Metodo que determina el lado D del rectangulo
  79.      * @return double El cuarto lado del rectangulo
  80.      */
  81.     public double ladoD() {
  82.         return L4.getP1().distancia(L4.getP2());
  83.     }
  84.  
  85.     /**
  86.      * Metodo que calcula el perimetro de un rectangulo.
  87.      * @return double Devuelve el perimetro del rectángulo es igual a la suma de
  88.      * las longitudes de sus cuatro lados(p = 2[b*h]).
  89.      */
  90.     public double perimetro() {
  91.         double p;
  92.         p = 2 * (ladoB() + ladoD());
  93.         return p;
  94.     }
  95.  
  96.     /**
  97.      * Metodo que determina el area de un rectangulo.
  98.      * @return dobule Devuelve la area de un rectangulo que es igual a la base
  99.      * por la altura(a = b*h).
  100.      */
  101.     public double area() {
  102.         double a;
  103.         a = (ladoB() * ladoD());
  104.         return a;
  105.  
  106.     }
  107.  
  108.     /**
  109.      * Metodo para determinar si se trata de un rectangulo o un cuadrado
  110.      */
  111.     public void TipoFigura() {
  112.         double d1, d2, d3, d4;
  113.         d1 = ladoA();
  114.         d2 = ladoB();
  115.         d3 = ladoC();
  116.         d4 = ladoD();
  117.         if (d1 == d2 & d2 == d3 & d3 == d4) {
  118.             JOptionPane.showMessageDialog(null, "La figura creda es un \"Cuadrado\"");
  119.         } else if (d1 == d2 & d2 != d3 & d3 == d4) {
  120.             JOptionPane.showMessageDialog(null, "La figura creda es un \"Rectangulo\"");
  121.         } else {
  122.             JOptionPane.showMessageDialog(null, "La figura creda no es nada ni Rectangulo o Cuadrado");
  123.         }
  124.     }
  125.  
  126.     /**
  127.      * Metodo que determina si dos rectangulos son iguales.
  128.      * @param Rectangulo Objeto de la clase rectangulo con el cual se comparara.
  129.      * @return boolean Devuelve true sin son iguales, false en otro caso.
  130.      */
  131.     public boolean equals(Rectangulo r) {
  132.         boolean a;
  133.         if (L1.equals(r.L1) == L2.equals(r.L2) == L3.equals(r.L3)) {
  134.             a = true;
  135.         } else if (ladoA() == r.ladoA() && ladoB() == r.ladoB() && ladoC() == r.ladoC() && ladoD() == r.ladoD()) {
  136.             a = true;
  137.         } else {
  138.             a = false;
  139.         }
  140.         return a;
  141.     }
  142.    
  143.     /**
  144.      * Metodo que desplasa el rectangulo horizontalmente(eje X).
  145.      * @param d Recibe un entero la cantidad de unidades para desplazar.
  146.      */
  147.     public void desplasarX(int d){
  148.         int f = 0;
  149.         L1.getP1().desplazar(d, f); L1.getP2().desplazar(d, f);
  150.         L2.getP1().desplazar(d, f); L2.getP2().desplazar(d, f);
  151.         L3.getP1().desplazar(d, f); L3.getP2().desplazar(d, f);
  152.         L4.getP1().desplazar(d, f); L4.getP2().desplazar(d, f);
  153.     }
  154.    
  155.     /**
  156.      * Metodo que desplasa el rectangulo verticalmente(eje Y).
  157.      * @param d Recibe un entero la cantidad de unidades para desplazar.
  158.      */
  159.     public void desplasarY(int d){
  160.         int f = 0;
  161.         L1.getP1().desplazar(f, d); L1.getP2().desplazar(f, d);
  162.         L2.getP1().desplazar(f, d); L2.getP2().desplazar(f, d);
  163.         L3.getP1().desplazar(f, d); L3.getP2().desplazar(f, d);
  164.         L4.getP1().desplazar(f, d); L4.getP2().desplazar(f, d);
  165.     }
  166.    
  167.     /**
  168.      * Metodo que calcula la union de dos rectangulos es decir, el rectangulo
  169.      * menor que incluya a ambos
  170.      */
  171.     public Rectangulo union(Rectangulo r){
  172.         return null;
  173.    
  174.     }
  175.    
  176.     /**
  177.      * Metodo para calcular la interseccion de dos rectangulos
  178.      */
  179.     public Rectangulo interseccion(Rectangulo r){
  180.    
  181.     }
  182.  
  183. }
  #2 (permalink)  
Antiguo 15/10/2013, 20:10
Avatar de ninga  
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Union e interseccion de rectangulos en java

Enserio? nadie quien me ayude?
  #3 (permalink)  
Antiguo 16/10/2013, 07:39
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 10 meses
Puntos: 306
Respuesta: Union e interseccion de rectangulos en java

Crear un rectángulo ya sabes, así que ¿qué es lo que no sabes hacer?

¿Unir rectángulos? Suma lados.
¿Intersección? Resta lados.
¿Rotar? Tienes que decidir cual es el origen de la rotación y calcular la nueva situación de los puntos en función del ángulo girado. ya sabes seno y coseno.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 16/10/2013, 11:29
Avatar de ninga  
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Union e interseccion de rectangulos en java

Cita:
Iniciado por Xerelo Ver Mensaje
Crear un rectángulo ya sabes, así que ¿qué es lo que no sabes hacer?

¿Unir rectángulos? Suma lados.
¿Intersección? Resta lados.
¿Rotar? Tienes que decidir cual es el origen de la rotación y calcular la nueva situación de los puntos en función del ángulo girado. ya sabes seno y coseno.
Pues para la union e interseccion me deve de devolver un rectangulo, no solo es restarlos, el probelma es como hacerlo, solo usando las clases que di, punto y linea y eso es lo que no se como se hace
  #5 (permalink)  
Antiguo 16/10/2013, 14:25
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 10 meses
Puntos: 306
Respuesta: Union e interseccion de rectangulos en java

Pero si es lo mismo que ya tienes hecho.

Sumar/restar dos rectángulos es desplazar dos de sus puntos una distancia. Evidentemente la distancia es el lado del segundo rectángulo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 16/10/2013, 19:09
Avatar de ninga  
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Union e interseccion de rectangulos en java

Cita:
Iniciado por Xerelo Ver Mensaje
Pero si es lo mismo que ya tienes hecho.

Sumar/restar dos rectángulos es desplazar dos de sus puntos una distancia. Evidentemente la distancia es el lado del segundo rectángulo.
Pero no entiendo como hacer la interseccion, la union ya la entendi mas o menos, pero con el codigo no entiendo

Etiquetas: clases, metodos, programa, rectangulo, union
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:25.