Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/10/2013, 19:28
Avatar de ninga
ninga
 
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 19
Antigüedad: 13 años
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. }