Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

lunes, 10 de marzo de 2014

Gráficos en 2D. Camino Aleatorio (Random Walks).

Se crea un nuevo proyecto en Netbeans y en vista de diseño se agrega un jButton y un jPanel.


Codigo 1 (Principal.java):

package graficos1;

public class Principal extends javax.swing.JFrame {

    public Principal() {
        initComponents();
        this.setLocationRelativeTo(null); //Centrar pantalla
    }

    @SuppressWarnings("unchecked")

    private void initComponents() {...}      

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

        Dibujo.Dibujar(jPanel1.getGraphics(), jPanel1.getWidth(), jPanel1.getHeight());
    }                                          

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Principal().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                    
    private javax.swing.JButton jButtonIniciar;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                  
}

 

Codigo 2 (Dibujo.java):

package graficos1;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

public class Dibujo {

    public static void Dibujar(Graphics g, int width, int height) {


        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setColor(Color.BLUE);

        int pasos = 25000, pos;
        int w = width / 2;
        int h = height / 2;
       
        for (int i = 0; i < pasos; i++) {
            pos = (int) Math.floor(Math.random() * 8 + 1);
            switch (pos) {
                case 1:
                    w--;
                    h++;
                    break;
                case 2:
                    h++;
                    break;
                case 3:
                    w++;
                    h++;
                    break;
                case 4:
                    w++;
                    break;
                case 5:
                    w++;
                    h--;
                    break;
                case 6:
                    h--;
                    break;
                case 7:
                    w--;
                    h--;
                    break;
                case 8:
                    w--;
                    break;
            }
           
            //Dibuja un punto
            g2.fillOval(w, h, 1, 1);

            //Control laterales
            w = (w > width) ? 1 : w;
            w = (w < 1) ? width : w;
            h = (h > height) ? 1 : h;
            h = (h < 1) ? height : h;

        }
    }

}



Resultado:












Con la tecnología de Blogger.