lunes, 1 de octubre de 2012

Algoritmo gráfico para dibujar un polígono en Java


Para realizar el dibujo del circulo con java tenemos que hacer los siguientes pasos:

Primero debemos crear 3 clases
- Formulario
- Areadedibujo
- Punto


Dentro de punto pondremos:

package appalgoritmograficograficarpoligonos;

public class Punto
{
     //Variables de instancia.
    private int X;
    private int Y;
 
   //Propiedades de Lectura.
    public int getX() {
        return X;    }

    public int getY() {
        return Y;
    }

   
    //Metodo Constructor
    public Punto(int X, int Y)
    {
        this.X=X;
        this.Y=Y;
    }

}

En el JPanel ponemos lo siguiente:

package appalgoritmograficograficarpoligonos;

import java.awt.Graphics;


public class AreaDibujo extends javax.swing.JPanel
{
    private Punto[] vertices;
    private int X;
    private int Y;
    private int Radio;
    private int Lados;

    public void setRadio(int Radio) {
        this.Radio = Radio;
    }

    public void setLados(int Lados) {
        this.Lados = Lados;
    }

    public AreaDibujo() {
        initComponents();
        this.X=0;
        this.Y=0;
        this.Lados=0;
        this.Radio=0;
    }

private void formMousePressed(java.awt.event.MouseEvent evt) {                                

    this.X = evt.getX();
    this.Y = evt.getY();
}                          

public void paint(Graphics g) {
        super.paint(g);
        for(int t=1;t<=this.Lados-1;t++)
        {
            int dx=0,dy=0;
            int x1 = vertices[t].getX();
            int x0 = vertices[t-1].getX();
            int y1 = vertices[t].getY();
            int y0 = vertices[t-1].getY();
           
            dx = x1 - x0;
            dy = y1 - y0;

             if (Math.abs(dx) > Math.abs(dy))
            {        
                float m = (float) dy / (float) dx;
                float b = y0 - m * x0;
                if(dx<0)
                    dx =  -1;
                else
                    dx =  1;
                while (x0 != x1)
                {
                    x0 += dx;
                    y0 = Math.round(m*x0 + b);
                    g.drawLine( x0, y0, x0, y0);
                }
            } else
            if (dy != 0)
            {                            
                float m = (float) dx / (float) dy;    
                float b = x0 - m*y0;
                if(dy<0)
                    dy =  -1;
                else
                    dy =  1;
                while (y0 != y1)
                {
                    y0 += dy;
                    x0 = Math.round(m * y0 + b);
                    g.drawLine( x0, y0, x0, y0);
                }
            }
        }//fin for
        if (this.Lados>0)
         g.drawLine( vertices[this.Lados -1].getX(), vertices[this.Lados -1].getY(), vertices[0].getX(), vertices[0].getY());  
    }
   
    public void DibujarPoligono()
    {
        Poligonos();
        repaint();
    }
   
    private void Poligonos()
    {
        double alfa;
        int a, b;
        vertices = new Punto[this.Lados];
        alfa = 2 * Math.PI / this.Lados;
       
        for(int i=0;i<=this.Lados-1;i++)
        {
           a= this.X + (int) (this.Radio * Math.cos((i - 1) * alfa));
           b= this.Y + (int) (this.Radio * Math.sin((i - 1) * alfa));
           vertices[i]= new Punto(a,b);
        }
    }
}
En el formulario ponemos esto:
private void btnGraficarActionPerformed(java.awt.event.ActionEvent evt) {                                            

    int num_lados= Integer.parseInt(this.txtNLados.getText());
    int radio = Integer.parseInt(this.txtRadio.getText());
    
    areaDibujo1.setLados(num_lados);
    areaDibujo1.setRadio(radio);
    
    areaDibujo1.DibujarPoligono();



La aplicacion quedaria asi:




3 comentarios:

  1. Porque no pones el link para descargar el código fuente?

    ResponderEliminar
  2. Super, me ayudó a complacer a mi sobrino de 8 años que quiso este algoritmo pero en Android xD

    ResponderEliminar