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. Creación de un Fractal (Árbol).

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


Codigo (FractalFree.java):

package FractalTree;

public class FractalTree extends javax.swing.JFrame {

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

                            
    private void initComponents() { ... } //Codigo generado automáticamente                       

    private void jButtonIniciarActionPerformed(java.awt.event.ActionEvent evt) {

        Dibujo.Dibujar(
                jPanel1.getGraphics(),
                jPanel1.getWidth() / 2,
                jPanel1.getHeight(),
                -90, 9);

    }                                             

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FractalTree().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 FractalTree;

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 x1, int y1, double angle, int depth) {
        if (depth == 0) return;
        Graphics2D g2 = (Graphics2D) g;
        g.setColor(Color.BLUE);
        g2.setRenderingHint(
                RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
//Filtro antialiasing             
       
        int x2 = x1 + (int) (Math.cos(Math.toRadians(angle)) * depth * 5.0);
        int y2 = y1 + (int) (Math.sin(Math.toRadians(angle)) * depth * 5.0);

        g2.drawLine(x1, y1, x2, y2);
        Dibujar(g2, x2, y2, angle - 20, depth - 1);
        Dibujar(g2, x2, y2, angle + 20, depth - 1);

    }
}



Resultado:


Con la tecnología de Blogger.