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.

domingo, 20 de abril de 2014

Gráficos en 2D. Dibujar una casa mediante método tortuga de Logo.

Logo era una aplicación que consistia en un cursor gráfico (llamado tortuga) que mediante unas instrucciones que le ibamos dando nos creaba un dibujo.

Creamos un nuevo proyecto de tipo JFrame y de nombre "Principal". En vista de diseño se agrega un jButton y un jPanel. Y finalmente se crea una nueva clase que se llame "Tortuga".


Codigo 1 (Principal.java):

package Tortuga;

public class Principal extends javax.swing.JFrame {

    Tortuga t;

    public Principal() {
        initComponents();
        this.setLocationRelativeTo(null);
        t = new Tortuga(
                jPanel1.getGraphics(),
                jPanel1.getWidth() / 2,
                jPanel1.getHeight() - 20, 0);
    }
          
    private void initComponents() { ... }          

    private void jButtonIniciarActionPerformed(java.awt.event.ActionEvent evt) {
        //Instrucciones tipo tortuga que dibuja una casa.
        t.gira(0);
        t.traza(100);
        t.gira(90);
        t.traza(100);
        t.gira(45);
        t.traza(100);
        t.gira(90);
        t.traza(100);
        t.gira(45);
        t.traza(100);
        t.gira(90);
        t.traza(50);
    }                                              

    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 (Tortuga.java):

package Tortuga;

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

public class Tortuga {

    double x, y, angulo;
    Graphics g;

    public Tortuga(Graphics g, double x, double y, double angulo) {
        this.x = x;
        this.y = y;
        this.angulo = angulo * Math.PI / 180;
        this.g = g;

        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(
                RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);//Filtro antialiasing
        g2.setStroke(new BasicStroke((float) 5));  //Grosor pincel
    }

    public void gira(double angulo) {
        this.angulo += angulo * Math.PI / 180;
    }

    public void traza(double distancia) {
        double x2 = x + distancia * Math.cos(angulo);
        double y2 = y - distancia * Math.sin(angulo);
        g.drawLine((int) x2, (int) y2, (int) x, (int) y);        
        salta(x2, y2);
    }

    public void salta(double x, double y) {
        this.x = x;
        this.y = y;
    }

}


Resultado:



No hay comentarios:

Publicar un comentario

Con la tecnología de Blogger.