Autor
|
Tema: Figuras Geometricas [By Burnhack] (Leído 8,339 veces)
|
Burnhack
Desconectado
Mensajes: 559
Hackers always fight
|
Bueno presentare mi programa jeje, es algo similar al de los balones pero mas avanzado, donde se trabaja con figuras geometricas y se permiten modificaciones de las mismas, poder seleccionar el color o los lados de un poligono son algunas de las opciones. Aun no encontre el metodo de que reboten las pelotas del estadio y tampoco lo encontre para las figuras consecuentemente jejee. A este programa le falta el metodo modificar aun...que posteare en los proximos dias cuando lo deje listo. Asi que si alguien se anima a participar en este programa le doy creditos sin ningun tipo de problema. El de agregar y eliminar funcionan perfectamente. El programa esta compilado y listo para ejecutar. Un saludo Nota : Hay creado un Package para las clases, Figura, PanelFiguras, Elipse, Rectangulo, Poligono Clase Principal [Figuras] import java.applet.Applet; import java.awt.event.*; import java.awt.*; import figuras.*;
public class Figuras extends Applet implements Runnable, ActionListener { PanelFiguras panelIzquierdo; Thread t; List lstFiguras; TextField txtAncho, txtAlto, txtVelocidad, txtMinX, txtMinY, txtMaxX, txtMaxY; Choice cboMovimiento, cboColor, cboLados; Button cmdAgregar, cmdModificar, cmdEliminar; CheckboxGroup cbgTipo; Checkbox chkRectangulo, chkElipse, chkPoligono; Color color[]; public void init(){ setLayout(new BorderLayout()); setSize(600, 400); //Crear el panel Derecho Panel panelDerecho = new Panel(); panelDerecho.setBackground(Color.gray); panelDerecho.setPreferredSize(new Dimension(200, 400)); //Añadir la etiqueta "Figuras" al panel derecho Label lblAux = new Label("Figuras"); lblAux.setPreferredSize(new Dimension(200, 20)); lblAux.setAlignment(Label.CENTER); panelDerecho.add(lblAux); //Añadir la lista para las figuras al panel derecho lstFiguras = new List(); lstFiguras.setPreferredSize(new Dimension(170, 170)); panelDerecho.add(lstFiguras); //Añadir campos de datos txtAncho = agregarTextField(panelDerecho, "Ancho"); txtAlto = agregarTextField(panelDerecho, "Alto"); cboMovimiento= agregarChoice(panelDerecho, "Movimiento"); cboMovimiento.add("Horizontal"); cboMovimiento.add("Vertical"); cboMovimiento.add("Diagonal"); cboMovimiento.add("Diagonal Inversa"); cboMovimiento.add("En L"); cboMovimiento.add("En L Inversa"); txtVelocidad = agregarTextField(panelDerecho, "Velocidad"); txtMinX = agregarTextField(panelDerecho, "Min X"); txtMinY = agregarTextField(panelDerecho, "Min Y"); txtMaxX = agregarTextField(panelDerecho, "Max X"); txtMaxY = agregarTextField(panelDerecho, "Max Y"); cboColor= agregarChoice(panelDerecho, "Color"); cboColor.add("Blanco"); cboColor.add("Azul"); cboColor.add("Rojo"); cboColor.add("Verde"); cboColor.add("Amarillo"); cboColor.add("Naranja"); cboColor.add("Rosa"); cboColor.add("Gris"); cboColor.add("Magenta"); color = new Color[9]; color[0] = Color.white; color[1] = Color.blue; color[2] = Color.red; color[3] = Color.green; color[4] = Color.yellow; color[5] = Color.orange; color[6] = Color.pink; color[7] = Color.gray; color[8] = Color.magenta; //Añadir tipo de figura cbgTipo = new CheckboxGroup(); chkRectangulo = new Checkbox("Rectangulo",cbgTipo, true); chkRectangulo.setPreferredSize(new Dimension(150, 20)); panelDerecho.add(chkRectangulo); chkElipse = new Checkbox("Elipse",cbgTipo, false); chkElipse.setPreferredSize(new Dimension(150, 20)); panelDerecho.add(chkElipse); chkPoligono = new Checkbox("Polígono", cbgTipo, false); chkPoligono.setPreferredSize(new Dimension(70, 20)); panelDerecho.add(chkPoligono); cboLados = new Choice(); cboLados.setPreferredSize(new Dimension (75, 20)); for ( int i=3; i<=9; i++) cboLados.add(i + " lados"); panelDerecho.add(cboLados); //Añadir botones cmdAgregar = new Button ("Agregar"); cmdAgregar.addActionListener((this)); cmdModificar = new Button ("Modificar"); cmdModificar.addActionListener((this)); cmdEliminar = new Button ("Eliminar"); cmdEliminar.addActionListener((this)); cmdAgregar.setPreferredSize(new Dimension(60,30)); cmdModificar.setPreferredSize(new Dimension(60,30)); cmdEliminar.setPreferredSize(new Dimension(60,30)); panelDerecho.add(cmdAgregar); panelDerecho.add(cmdModificar); panelDerecho.add(cmdEliminar); //Añadir el panel Derecho al Applet add(panelDerecho, BorderLayout.EAST); //Crear el panel izquierdo panelIzquierdo = new PanelFiguras(this); add(panelIzquierdo, BorderLayout.CENTER); } private TextField agregarTextField(Panel p, String e){ Label lblAux= new Label(e); TextField txtAux = new TextField(); lblAux.setPreferredSize(new Dimension (90, 20)); txtAux.setPreferredSize(new Dimension (90, 20)); p.add(lblAux); p.add(txtAux); return txtAux; } private Choice agregarChoice(Panel p, String e){ Label lblAux= new Label(e); Choice cboAux = new Choice(); lblAux.setPreferredSize(new Dimension (90, 20)); cboAux.setPreferredSize(new Dimension (90, 20)); p.add(lblAux); p.add(cboAux); return cboAux; }
public void start(){ t = new Thread(this); if (t != null) t.start(); }
public void run(){ while (true){ panelIzquierdo.repaint(); panelIzquierdo.mover(); try { Thread.sleep(40); } catch (Exception e) { } } } public void actionPerformed (ActionEvent e){ if (e.getSource() == cmdAgregar){ Figura aux; if(cbgTipo.getSelectedCheckbox()== chkRectangulo){ lstFiguras.add("Rectangulo"); aux = new Rectangulo (Integer.parseInt(txtAncho.getText()), Integer.parseInt(txtAlto.getText()), Integer.parseInt(txtVelocidad.getText()), cboMovimiento.getSelectedIndex(), Integer.parseInt(txtMinX.getText()), Integer.parseInt(txtMinY.getText()), Integer.parseInt(txtMaxX.getText()), Integer.parseInt(txtMaxY.getText()), color[cboColor.getSelectedIndex()]); } else if (cbgTipo.getSelectedCheckbox()== chkElipse){ lstFiguras.add("Elipse"); aux = new Elipse (Integer.parseInt(txtAncho.getText()), Integer.parseInt(txtAlto.getText()), Integer.parseInt(txtVelocidad.getText()), cboMovimiento.getSelectedIndex(), Integer.parseInt(txtMinX.getText()), Integer.parseInt(txtMinY.getText()), Integer.parseInt(txtMaxX.getText()), Integer.parseInt(txtMaxY.getText()), color[cboColor.getSelectedIndex()]); } else{ lstFiguras.add("Poligono"); aux = new Poligono (cboLados.getSelectedIndex()+3, Integer.parseInt(txtAncho.getText()), Integer.parseInt(txtVelocidad.getText()), cboMovimiento.getSelectedIndex(), Integer.parseInt(txtMinX.getText()), Integer.parseInt(txtMinY.getText()), Integer.parseInt(txtMaxX.getText()), Integer.parseInt(txtMaxY.getText()), color[cboColor.getSelectedIndex()]); } //añadir la figura al panel izquierdo panelIzquierdo.agregarFigura(aux); } else if (e.getSource () == cmdModificar){ } else if (e.getSource ()== cmdEliminar){ int i =lstFiguras.getSelectedIndex(); if (i >= 0){ panelIzquierdo.eliminarFigura(i); lstFiguras.remove(i); } } } }
|
|
|
En línea
|
Cuentas Premium Gratis aquí
Petición partidos fútbol, F1, tenis, baloncesto... aquí
|
|
|
Burnhack
Desconectado
Mensajes: 559
Hackers always fight
|
Esta es la clase Figura, se refiere a cada figura , no confundir con figuras...que es la clase principal package figuras;
import java.awt.Color; import java.awt.Graphics;
public abstract class Figura { int x, // coordenada X y, // coordenada Y v, // velocidad de movimiento vx, // componentes x de la velocidad vy, // componentes y de la velocidad ancho, //ancho de la figura alto, //alto de la figura tipo, // tipo de movimiento minX, // valor minimo para la coordenada X minY, // valor minimo para la coordenada Y maxX, // valor maximo para la coordenada X maxY; // valor maximo para la coordenada Y
Color color; // color de relleno de la figura public Figura (int ancho, int alto, int v, int tipo, int minX, int minY, int maxX, int maxY, Color color){ this.v = v; this.ancho = ancho; this.alto= alto; this.minX = minX; this.minY = minY; this.maxX = maxX; this.maxY = maxY; this.color = color; this.tipo= tipo; double anchoMov = maxX - minX + 1; double altoMov = maxY - minY +1; double d = Math.sqrt (Math.pow(anchoMov, 2)+ Math.pow(altoMov, 2)); switch (tipo){//tipos de movimiento case 0://horizontal restringido a un area rectangular x = minX ; y = (minY + maxY + 1 -alto); vx = v; vy = 0; break; case 1: //Movimiento vertical restringido a un area rectangular x = (minX + maxX - ancho +1) /2 ; y = minY; vx = 0; vy = v; break; case 2://Movimiento diagonal x = minX ; y = minY; vx = (int) Math.round(anchoMov * v / d); vy = (int) Math.round(altoMov * v / d); break; case 3://Movimiento diagonal invertido x = maxX - ancho; y = minY; vx = -(int) Math.round(anchoMov * v / d); vy = (int) Math.round(altoMov * v / d); break; case 4://Movimiento L x = minX ; y = minY; vx = 0; vy = -v; break; case 5://Movimiento L invertida x = minX ; y = minY; vx = v; vy = 0; break; } }
public abstract void paint (Graphics g);
public void mover(){ switch (tipo) { case 0: moverH(); break; case 1: moverV(); break; case 2: moverD(); break; case 3: moverDI (); break; case 4: moverL (); break; case 5: moverLI (); break; } } private void moverH(){ x += vx; if (x + ancho >= maxX){ x = maxX - ancho; vx = -vx; } else if(x <= minX){ x = minX; vx = -vx; } } private void moverV(){ y += vy; if (y + alto >= maxY){ y = maxY - alto; vy = -vy; } else if(y <= minY){ y = minY; vy = -vy; } } private void moverD(){ x += vx ; y += vy ; if ((x+ ancho) >= maxX || (y + alto) >= maxY){ x = maxX - ancho; y = maxY - alto; vx = -vx; vy = -vy; } else if (x <= minX || y <= minY){ x = minX; y= minY; vx = -vx; vy = -vy; } } private void moverDI(){ x += vx ; y += vy ; if (x <= minX || (y + alto) >= maxY){ x = minX; y = maxY - alto; vx = -vx; vy = -vy; } else if ((x + ancho) >= maxX || y <= minY){ x = maxX - ancho; y = minY; vx = -vx; vy = -vy; } } private void moverL(){ x += vx; y +=vy; if (y + alto >= maxY && vy > 0){ y = maxY - alto; vx = v; vy = 0; } else if(x + ancho >= maxX && vx > 0){ x = maxX - ancho; vx = -vx; } else if (x <= minX && vx < 0){ x= minX; vx = 0; vy = -v; } else if(y <= minY && vy < 0 ){ y = minY; vy = -vy; } } private void moverLI(){ x += vx; y +=vy; if (x + ancho >= maxX && vx > 0){ x = maxX - ancho; vx = 0; vy = -v; vy = v; } else if(y + alto >= maxY && vy > 0 ){ y = maxY - alto; vy = -vy; } else if (y <= minY && vy < 0){ y = minY; vy = 0; vx = -v; } else if(x <= minX && vx < 0){ x= minX; vx = -vx; } } }
|
|
|
En línea
|
Cuentas Premium Gratis aquí
Petición partidos fútbol, F1, tenis, baloncesto... aquí
|
|
|
Burnhack
Desconectado
Mensajes: 559
Hackers always fight
|
Esta es la clase Panel Figuras, donde agregaremos las figuras. esta clase tampoco hacia falta realmente ya que las figuras las podemos dibujar sobre el propio primer panel , limitariamos el campo y listo, pero bueno asi queda mas claro el code.Nose cual estaria mejor visto desde el punto de vista del programador package figuras;
import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.Panel;
public class PanelFiguras extends Panel { Figura v[]; int cont; static final int max = 1000; Image aux;
public PanelFiguras(Applet a){ cont = 0; v = new Figura[max]; aux = a.createImage(600, 400); } public boolean agregarFigura(Figura f){ if (cont == 1000) return false; else{ v[cont ++] = f; return true; } } public boolean eliminarFigura(int i){ if (cont == 0 || i >= cont) return false; else{ for (int j=i; j<cont; j++) v[j] = v[j+1]; cont--; return true; } } public void mover(){ for (int i=0; i<cont; i++) v[i].mover(); } public void update (Graphics g){ paint (g); } public void paint(Graphics g){ aux.getGraphics().setColor(Color.white); aux.getGraphics().fillRect(0, 0, 600, 400); for (int i=0; i<cont; i++) v[i].paint(aux.getGraphics()); g.drawImage(aux, 0, 0, this); }
}
|
|
|
En línea
|
Cuentas Premium Gratis aquí
Petición partidos fútbol, F1, tenis, baloncesto... aquí
|
|
|
Burnhack
Desconectado
Mensajes: 559
Hackers always fight
|
Aqui tengo las clases de cada una de las figuras Elipse, como so cortas las pondre todas en este mismo post. Repito son clases diferentes, no copiar y pegar en la misma clase. Hay que crear clases diferentes para los tres tipos de figuras Clase Elipse package figuras;
import java.awt.Color; import java.awt.Graphics;
public class Elipse extends Figura {
public Elipse(int ancho, int alto, int v, int tipo, int minX, int minY, int maxX, int maxY, Color color) { super(ancho, alto, v, tipo, minX, minY, maxX, maxY, color);
}
public void paint(Graphics g) { g.setColor(color); g.fillOval(x, y, ancho, alto); }
} La clase Poligono package figuras;
import java.awt.*; import java.awt.Color; import java.awt.Graphics;
public class Poligono extends Figura {
int px[], py[]; public Poligono (int lados, int radio, int v, int tipo, int minX, int minY, int maxX, int maxY, Color color) { super(radio, radio, v, tipo, minX, minY, maxX, maxY, color); px = new int [lados]; py = new int [lados]; double inc = 2*Math.PI/ (double)lados; double angulo = 0.0; for (int i=0; i<lados; i++){ px[i] =(int)((int)Math.round(radio * Math.cos(angulo)) + radio + x); py[i] =(int)((int)Math.round(radio * Math.sin(angulo)) + radio + y); angulo += inc; } } public void paint(Graphics g) { g.setColor(color); g.fillPolygon(px, py, px.length); } public void mover(){ int xaux = x, yaux= y; super.mover(); int dx = x -xaux , dy = y - yaux; for (int i = 0; i<px.length; i++){ px[i] += dx; py[i] += dy; } } } Y la clase Rectangulo package figuras;
import java.awt.Color; import java.awt.Graphics;
public class Rectangulo extends Figura {
public Rectangulo(int ancho, int alto, int v, int tipo, int minX, int minY, int maxX, int maxY, Color color) { super(ancho, alto, v, tipo, minX, minY, maxX, maxY, color); }
public void paint(Graphics g) { g.setColor(color); g.fillRect(x, y, ancho, alto); }
}
Saludos
|
|
|
En línea
|
Cuentas Premium Gratis aquí
Petición partidos fútbol, F1, tenis, baloncesto... aquí
|
|
|
narcorasta
Desconectado
Mensajes: 4
|
gran trabajo amigo pero esto lo puedo implementar en netbeans ? esq tengo un trabajo parecido y necesito ayuda !
|
|
|
En línea
|
|
|
|
RyogiShiki
Desconectado
Mensajes: 745
げんしけん - Hikkikomori FTW!!!
|
gran trabajo amigo pero esto lo puedo implementar en netbeans ? esq tengo un trabajo parecido y necesito ayuda ! Dos cosas: primero, si necesitas ayuda porfavor abre un nuevo tema, incluso puedes en ese tema referenciar este tema. Y segundo es contra las normas revivir post tan viejos, vamos que es un tema del 2008. Saludos
|
|
|
En línea
|
|
|
|
narcorasta
Desconectado
Mensajes: 4
|
lo siento amigo olvide ese detalle pero esq busque por toda la web y esto es lo mas cercano qe encontre y tenia qe intentarlo pero bueno abrire otro tema para ver si me ayudan gracias por avisar y saludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Transformaciones geometricas en open gl
Programación C/C++
|
V_Dan
|
0
|
1,772
|
16 Septiembre 2012, 06:02 am
por V_Dan
|
|
|
[Ayuda] Reconocimientos de Figuras Geométricas en imágenes JAVA
Java
|
alex.mg
|
2
|
4,369
|
6 Agosto 2013, 05:55 am
por danielo-
|
|
|
Hacer Figuras Con Ciclos
« 1 2 »
Programación C/C++
|
ximenaferneymega
|
10
|
10,768
|
22 Octubre 2016, 16:33 pm
por dato000
|
|
|
Graficar 2 figuras 3D en Matlab al tiempo
Programación General
|
Daor02
|
0
|
1,845
|
7 Abril 2017, 04:05 am
por Daor02
|
|
|
Ayuda con problema de figuras
Programación C/C++
|
Jay
|
1
|
1,740
|
5 Agosto 2019, 15:15 pm
por K-YreX
|
|