elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Figuras Geometricas [By Burnhack]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Figuras Geometricas [By Burnhack]  (Leído 8,302 veces)
Burnhack


Desconectado Desconectado

Mensajes: 559


Hackers always fight


Ver Perfil WWW
Figuras Geometricas [By Burnhack]
« en: 22 Abril 2008, 21:31 pm »

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]

Código:
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 Desconectado

Mensajes: 559


Hackers always fight


Ver Perfil WWW
Re: Figuras Geometricas [By Burnhack]
« Respuesta #1 en: 22 Abril 2008, 21:32 pm »

Esta es la clase Figura, se refiere a cada figura , no confundir con figuras...que es la clase principal

Código:
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 Desconectado

Mensajes: 559


Hackers always fight


Ver Perfil WWW
Re: Figuras Geometricas [By Burnhack]
« Respuesta #2 en: 22 Abril 2008, 21:33 pm »

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

Código:
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 Desconectado

Mensajes: 559


Hackers always fight


Ver Perfil WWW
Re: Figuras Geometricas [By Burnhack]
« Respuesta #3 en: 22 Abril 2008, 21:34 pm »

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

Código:
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


Código:
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


Código:
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 Desconectado

Mensajes: 4


Ver Perfil
Re: Figuras Geometricas [By Burnhack]
« Respuesta #4 en: 9 Junio 2013, 08:00 am »

gran trabajo amigo  ;-) pero esto lo puedo implementar en netbeans ? esq tengo un trabajo parecido y necesito ayuda !
En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Figuras Geometricas [By Burnhack]
« Respuesta #5 en: 9 Junio 2013, 08:26 am »

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 Desconectado

Mensajes: 4


Ver Perfil
Re: Figuras Geometricas [By Burnhack]
« Respuesta #6 en: 9 Junio 2013, 22:20 pm »

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  :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Transformaciones geometricas en open gl
Programación C/C++
V_Dan 0 1,738 Último mensaje 16 Septiembre 2012, 06:02 am
por V_Dan
[Ayuda] Reconocimientos de Figuras Geométricas en imágenes JAVA
Java
alex.mg 2 4,325 Último mensaje 6 Agosto 2013, 05:55 am
por danielo-
Hacer Figuras Con Ciclos « 1 2 »
Programación C/C++
ximenaferneymega 10 10,641 Último mensaje 22 Octubre 2016, 16:33 pm
por dato000
Graficar 2 figuras 3D en Matlab al tiempo
Programación General
Daor02 0 1,819 Último mensaje 7 Abril 2017, 04:05 am
por Daor02
Ayuda con problema de figuras
Programación C/C++
Jay 1 1,711 Último mensaje 5 Agosto 2019, 15:15 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines