# Würfel drehen



## Weiti (25. Jun 2010)

Hallo, ich will einen Würfel drehen und hab nun angefangen erst mal ein Quadrat im Raum zu zeichnen.
Leider weiß ich nicht ob das so stimmt und vor allem wie ich View und Cam am besten setze.
Es geht hier nicht um kluge java-Programmierung sonder um die Umrechnung von 3D nach 2D und die Drehmatrizen.

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Hauptklasse.java
 *
 * Created on 25.06.2010, 17:09:22
 */
package drehwuerfel;

import java.awt.Graphics;

/**
 *
 * @author Weiti
 */
public class Hauptklasse extends javax.swing.JFrame {

    /** Creates new form Hauptklasse */
    public Hauptklasse() {
        initComponents();
    }

    double s=5;
   // double faktor = 1;
   // double Bildschirmmitte_x = 300;
   // double Bildschirmmitte_y = 300;

    final double[] Cam = {300,300,300};
    final double[] View = {300,300,300};

    double[] Vektor1 = {0, 0, 20};
    double[] Vektor2 = {0, 20, 0};
    double[] Vektor3 = {0, 0, 20};

    double[] AB={0,s,0};
    double[] BC={s,0,0};
    double[] DC={0,s,0};
    double[] AD={s,0,0};

    public double[] drehX(double[] Vektor, double d) {
        double[][] MatrixX = {{1, 0, 0}, {0, Math.cos(d), -1 * Math.cos(d)}, {0, Math.sin(d), Math.cos(d)}};
        double[] Ausgabe = MatrixmalVektor(MatrixX, Vektor);
        return Ausgabe;
    }

     public double[] drehY(double[] Vektor, double d) {
        double[][] MatrixY = {{Math.cos(d), 0, Math.sin(d)}, {0, 1, 0,}, { -1*Math.sin(d), 0, Math.cos(d)}};
        double[] Ausgabe = MatrixmalVektor(MatrixY, Vektor);
        return Ausgabe;
    }

     public double[] drehZ(double[] Vektor, double d) {
        double[][] MatrixZ = {{Math.cos(d), -1*Math.sin(d), 0}, {Math.sin(d), Math.cos(d), 0}, {0, 0, 1}};
        double[] Ausgabe = MatrixmalVektor(MatrixZ, Vektor);
        return Ausgabe;
    }

    public double[] MatrixmalVektor(double[][] M, double[] V) {
        double[] y = new double[3];
        for (int i = 0; i < 3; ++i)
        {
            y[i] = 0;
            for (int j = 0; j < 3; ++j)
            {
                y[i] += M[i][j] * V[j];
            }
        }
        return y;
    }

    public double[] dim2of(double[] V) {
        /*
        double punktx = (Vektor[0] * faktor / Vektor[2]) + Bildschirmmitte_x;
        double punkty = (Vektor[1] * faktor / Vektor[2]) + Bildschirmmitte_y;
         *
         */
        double dx = (V[1]-Cam[1])+(V[0]-Cam[0])-(V[2]-Cam[2]);
        double dy = (V[2]-Cam[2])+(V[1]-Cam[1])-(V[0]-Cam[0])+(V[1]-Cam[1])-(V[0]-Cam[0]);
        double dz = (V[2]-Cam[2])+(V[1]-Cam[1])-(V[0]-Cam[0])-(V[1]-Cam[1])-(V[0]-Cam[0]);

        double bx = (dx-View[0])/(View[2]/dz);
        double by = (dy-View[1])/(View[2]/dz);
        double[] Ausgabe = {bx, by};
        return Ausgabe;
    }

    @Override
    public void paint(Graphics g) {

        int NN = 400;

        super.paint(g);

        double[] V1 = dim2of(Vektor1);
        double[] V2 = dim2of(Vektor2);
        double[] V3 = dim2of(Vektor3);

        double[] AB2 = dim2of(AB);
        double[] BC2 = dim2of(BC);
        double[] DC2 = dim2of(DC);
        double[] AD2 = dim2of(AD);

        //g.drawLine(NN, NN, NN+(int) (V1[0]), NN+(int) (V1[1]));
       // g.drawLine(NN, NN, NN+(int) (V2[0]), NN+(int) (V2[1]));
        //g.drawLine(NN, NN, (int) (V3[0]), (int) (V3[1]));

        g.drawLine(NN, NN, NN+(int) (AB2[0]), NN+(int) (AB2[1]));
        g.drawLine(NN+(int) (AB2[0]), NN+(int) (AB2[1]), NN+(int) (BC2[0]), NN+(int) (BC2[1]));
        g.drawLine(NN+(int) (AD2[0]), NN+(int) (AD2[1]), NN+(int) (DC2[0]), NN+(int) (DC2[1]));
        g.drawLine(NN, NN, NN+(int) (AD2[0]), NN+(int) (AD2[1]));


    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(100, 100));

        jButton1.setText("drehX");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("drehY");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("drehZ");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(536, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButton3)
                    .addComponent(jButton2)
                    .addComponent(jButton1))
                .addGap(37, 37, 37))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addComponent(jButton1)
                .addGap(18, 18, 18)
                .addComponent(jButton2)
                .addGap(18, 18, 18)
                .addComponent(jButton3)
                .addContainerGap(436, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Vektor1=drehX(Vektor1,0.1*Math.PI/4);
        Vektor2=drehX(Vektor2,0.1*Math.PI/4);
        Vektor3=drehX(Vektor3,0.1*Math.PI/4);
        AB=drehX(AB,0.1*Math.PI/4);
        BC=drehX(BC,0.1*Math.PI/4);
        DC=drehX(DC,0.1*Math.PI/4);
        AD=drehX(AD,0.1*Math.PI/4);
        repaint();
    }

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        Vektor1=drehY(Vektor1,0.1*Math.PI/4);
        Vektor2=drehY(Vektor2,0.1*Math.PI/4);
        Vektor3=drehY(Vektor3,0.1*Math.PI/4);
        AB=drehY(AB,0.1*Math.PI/4);
        BC=drehY(BC,0.1*Math.PI/4);
        DC=drehY(DC,0.1*Math.PI/4);
        AD=drehY(AD,0.1*Math.PI/4);
        repaint();
    }

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        Vektor1=drehZ(Vektor1,0.1*Math.PI/4);
        Vektor2=drehZ(Vektor2,0.1*Math.PI/4);
        Vektor3=drehZ(Vektor3,0.1*Math.PI/4);
        AB=drehZ(AB,0.1*Math.PI/4);
        BC=drehZ(BC,0.1*Math.PI/4);
        DC=drehZ(DC,0.1*Math.PI/4);
        AD=drehZ(AD,0.1*Math.PI/4);
        repaint();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Hauptklasse().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    // End of variables declaration
}
```


----------



## Marco13 (26. Jun 2010)

Mal im Ernst: Erwartest du, dass jemand dieses Programm nachvollzieht und einen Essay dazu schreibt, wie du das machen könntest? (Es geht manchmal DOCH um "kluge" (d.h. nachvollziehbare) Programmierung). Bisher kann man darauf kaum mehr antworten als "Kopier dir den code von http://java.sun.com/applets/jdk/1.4/demo/applets/WireFrame/ThreeD.java" oder "Lies dir 3D projection - Wikipedia, the free encyclopedia durch" ...


----------



## Weiti (27. Jun 2010)

```
public double[] drehX(double[] Vektor, double d)
```
Diese Funktion soll die Matrix um die X-Achse drehen, Formel ist von Drehmatrix ? Wikipedia
Analog für Y und Z-Achse. Dazu nehme ich den Vektor der gedreht werden soll mit der Matrix mal.


```
public double[] dim2of(double[] V)
```
Hier findet die Projektion statt, nach der Formel von 3D projection - Wikipedia, the free encyclopedia
Wobei ich O_x,y,z=(0,0,0) gesetzt habe, da sin 0 = 1, habe ich es in der Formel gar nicht drinstehen.


```
final double[] Cam = {300,300,300};
final double[] View = {300,300,300};
```
Cam = a_x,y,z auf wikipedia
View = c_x,y,z auf wikipedia

Das ganze soll dann in paint() als Linien gezeichnet werden.
Ich versuche keine Java 3D Funktionen zu verwenden.


----------



## Marco13 (27. Jun 2010)

Das Beispiel unter http://java.sun.com/applets/jdk/1.4/demo/applets/WireFrame/ThreeD.java verwendet auch keine Java3D-Funktionen... Aber ansonsten ... wenn ich davon ausgehen muss, dass meine Antwort eine Art Remote-Debugging wäre, werde ich dazu wohl nicht mehr viel sagen.... (sorry..  )


----------



## Landei (27. Jun 2010)

Wie wäre es, wenn du dir wenigstens die wichtigsten Klassen aus dem math package von irgendeinem Java-3D-Projekt borgst (z.B. jmonkeyengine - Project Hosting on Google Code ), dann hast du Vektoren, Matrizen, Drehungen - und du weißt, dass sie auch funktionieren...

Immer das Rad neu erfinden ist uncool.


----------



## Weiti (27. Jun 2010)

Ok, danke ich werde mal in den Paketen nach gucken, tut mir Leid das ich nur so spärlich Informationen habe, eine bekannte hat mir nur gesagt einen 3D Würfel darstellen bei dem es auf die Matrixmultiplikation ankommt. Ich melde mich nochmal wenn ich genaueres weiß.
Gruß, Weiti


----------



## Weiti (1. Jul 2010)

Hallo, Hier die Aufgabe. mehr hab ich leider nicht als Informationen.

Ich hoffe es kann mir jemand Tipps geben wie man das implementiert.



> 2. Programmiert einen drehbaren Wuerfel. Analog zu Jaspers
> Programm soll nun auch die dritte Dimension erschlossen
> werden. Es soll eine Drehung um die x-Achse, y-Achse
> und z-Achse (die aus dem Bildschirm heraus zeigt)
> ...


----------



## Weiti (27. Jul 2010)

Hallo, ich habe inzwischen die Lösung:
Es soll einfach keine Perspektive einberechnet werden, dann ist es auch trivial.


```
package rotation;

import java.awt.Graphics;

public class RotFrame extends javax.swing.JFrame {

    double xWerte[] = {-100, -100,  100,  100, -100, -100,  100,  100};
    double yWerte[] = {-100, -100, -100, -100,  100,  100,  100,  100};
    double zWerte[] = {-100,  100,  100, -100, -100,  100,  100, -100};
    double mitteX = 400;
    double mitteY = 200;

    /** Creates new form RotFrame */
    public RotFrame() {
        initComponents();
        repaint();
    }
    
    @Override
    public void paint(Graphics graphics)
    {
        super.paint(graphics);
        // A-B
        graphics.drawLine((int)(mitteX + xWerte[0]), (int)(mitteY + yWerte[0]),
                          (int)(mitteX + xWerte[1]), (int)(mitteY + yWerte[1]));
        // B-C
        graphics.drawLine((int)(mitteX + xWerte[1]), (int)(mitteY + yWerte[1]),
                          (int)(mitteX + xWerte[2]), (int)(mitteY + yWerte[2]));
        // C-D
        graphics.drawLine((int)(mitteX + xWerte[2]), (int)(mitteY + yWerte[2]),
                          (int)(mitteX + xWerte[3]), (int)(mitteY + yWerte[3]));
        // D-A
        graphics.drawLine((int)(mitteX + xWerte[3]), (int)(mitteY + yWerte[3]),
                          (int)(mitteX + xWerte[0]), (int)(mitteY + yWerte[0]));
        // A-E
        graphics.drawLine((int)(mitteX + xWerte[0]), (int)(mitteY + yWerte[0]),
                          (int)(mitteX + xWerte[4]), (int)(mitteY + yWerte[4]));
        // B-F
        graphics.drawLine((int)(mitteX + xWerte[1]), (int)(mitteY + yWerte[1]),
                          (int)(mitteX + xWerte[5]), (int)(mitteY + yWerte[5]));
        // C-G
        graphics.drawLine((int)(mitteX + xWerte[2]), (int)(mitteY + yWerte[2]),
                          (int)(mitteX + xWerte[6]), (int)(mitteY + yWerte[6]));
        // D-H
        graphics.drawLine((int)(mitteX + xWerte[3]), (int)(mitteY + yWerte[3]),
                          (int)(mitteX + xWerte[7]), (int)(mitteY + yWerte[7]));
        // E-F
        graphics.drawLine((int)(mitteX + xWerte[4]), (int)(mitteY + yWerte[4]),
                          (int)(mitteX + xWerte[5]), (int)(mitteY + yWerte[5]));
        // F-G
        graphics.drawLine((int)(mitteX + xWerte[5]), (int)(mitteY + yWerte[5]),
                          (int)(mitteX + xWerte[6]), (int)(mitteY + yWerte[6]));
        // G-H
        graphics.drawLine((int)(mitteX + xWerte[6]), (int)(mitteY + yWerte[6]),
                          (int)(mitteX + xWerte[7]), (int)(mitteY + yWerte[7]));
        // H-E
        graphics.drawLine((int)(mitteX + xWerte[7]), (int)(mitteY + yWerte[7]),
                          (int)(mitteX + xWerte[4]), (int)(mitteY + yWerte[4]));
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("x-Achse");

        jLabel2.setText("y-Achse");

        jLabel3.setText("z-Achse");

        jButton1.setText(" < ");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText(" > ");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText(" < ");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setText(" > ");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        jButton5.setText(" < ");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jButton6.setText(" > ");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jButton5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton3, 0, 0, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jButton6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE))
                .addContainerGap(417, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton3)
                    .addComponent(jButton4)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton5)
                    .addComponent(jLabel3)
                    .addComponent(jButton6))
                .addContainerGap(305, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // z-Achse, negativ
        double a = -0.1;
        for (int i = 0; i < 8; i++)
        {
            double newx = xWerte[i] * Math.cos(a) - yWerte[i] * Math.sin(a);
            double newy = xWerte[i] * Math.sin(a) + yWerte[i] * Math.cos(a);
            double newz = zWerte[i];
            xWerte[i] = newx;
            yWerte[i] = newy;
            zWerte[i] = newz;
        }
        repaint();
    }                                        

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //z-Achse, positiv
        double a = 0.1;
        for (int i = 0; i < 8; i++)
        {
            double newx = xWerte[i] * Math.cos(a) - yWerte[i] * Math.sin(a);
            double newy = xWerte[i] * Math.sin(a) + yWerte[i] * Math.cos(a);
            double newz = zWerte[i];
            xWerte[i] = newx;
            yWerte[i] = newy;
            zWerte[i] = newz;
        }
        repaint();
    }                                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // z-Achse, positiv
        double a = 0.1;
        for (int i = 0; i < 8; i++)
        {
            double newx = xWerte[i];
            double newy = yWerte[i] * Math.cos(a) - zWerte[i] * Math.sin(a);
            double newz = yWerte[i] * Math.sin(a) + zWerte[i] * Math.cos(a);
            xWerte[i] = newx;
            yWerte[i] = newy;
            zWerte[i] = newz;
        }
        repaint();
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // z-Achse, positiv
        double a = -0.1;
        for (int i = 0; i < 8; i++)
        {
            double newx = xWerte[i];
            double newy = yWerte[i] * Math.cos(a) - zWerte[i] * Math.sin(a);
            double newz = yWerte[i] * Math.sin(a) + zWerte[i] * Math.cos(a);
            xWerte[i] = newx;
            yWerte[i] = newy;
            zWerte[i] = newz;
        }
        repaint();
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // y-Achse, positiv
        double a = -0.1;
        for (int i = 0; i < 8; i++)
        {
            double newx = xWerte[i] * Math.cos(a) - zWerte[i] * Math.sin(a);
            double newy = yWerte[i];
            double newz = xWerte[i] * Math.sin(a) + zWerte[i] * Math.cos(a);
            xWerte[i] = newx;
            yWerte[i] = newy;
            zWerte[i] = newz;
        }
        repaint();
    }                                        

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // y-Achse, positiv
        double a = 0.1;
        for (int i = 0; i < 8; i++)
        {
            double newx = xWerte[i] * Math.cos(a) - zWerte[i] * Math.sin(a);
            double newy = yWerte[i];
            double newz = xWerte[i] * Math.sin(a) + zWerte[i] * Math.cos(a);
            xWerte[i] = newx;
            yWerte[i] = newy;
            zWerte[i] = newz;
        }
        repaint();
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new RotFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    // End of variables declaration                   

}
```


----------

