Heute haben wir im Java-Programmieren mit GUI-Programmierung angefangen. Die Exercices waren simpel (Buttons erzeugen, ausrichten etc.), jedoch hatte es als Zusatzaufgabe noch die Kochsche Kurve. 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* Kochsche Kurve
*
* @author Andreas Jaggi
* @created 26. März 2004
* @version 1.0
*/
public class KochscheKurve
extends JFrame {
/**
* Constructor for the KochscheKurve object
*/
public KochscheKurve() {
setSize( 600, 600 );
setTitle( "Die Kochsche Kurve" );
}
/**
* Überladene "interne" Methode, die aufgerufen wird, wenn das Fenster neu
* gezeichnet werden muss
*
* @param g Graphik-Objekt, auf dem gezeichnet wird
*/
public void paint( Graphics g ) {
super.paint( g );
double x1;
double x2;
double x3;
double y1;
double y2;
double y3;
int depth = 13;
x1 = 100;
y1 = 400;
x2 = 500;
y2 = 400;
x3 = ( x2 - x1 ) * Math.cos( -Math.PI / 3 ) -
( y2 - y1 ) * Math.sin( -Math.PI / 3 ) + x1;
y3 = ( x2 - x1 ) * Math.sin( -Math.PI / 3 ) +
( y2 - y1 ) * Math.cos( -Math.PI / 3 ) + y1;
koch( g, depth, x2, y2, x1, y1 );
koch( g, depth, x1, y1, x3, y3 );
koch( g, depth, x3, y3, x2, y2 );
}
/**
* Rekursive Funktion, welche den Fraktal zwischen zwei Punkten bis zu einer
* bestimmten Tiefe zeichnet.
*
* @param g Graphik-Objekt, auf dem gezeichnet wird
* @param depth Rekursionstiefe
* @param x1 X-Koordinate des ersten Punktes
* @param y1 Y-Koordinate des ersten Punktes
* @param x2 X-Koordinate des zweiten Punktes
* @param y2 X-Koordinate des zweiten Punktes
*/
public void koch( Graphics g, int depth, double x1, double y1, double x2,
double y2 ) {
double x13 = x1 + ( x2 - x1 ) / 3.0;
double x23 = x1 + 2.0 * ( x2 - x1 ) / 3.0;
double y13 = y1 + ( y2 - y1 ) / 3.0;
double y23 = y1 + 2.0 * ( y2 - y1 ) / 3.0;
double xd = ( x23 - x13 ) * Math.cos( -Math.PI / 3 ) -
( y23 - y13 ) * Math.sin( -Math.PI / 3 ) + x13;
double yd = ( x23 - x13 ) * Math.sin( -Math.PI / 3 ) +
( y23 - y13 ) * Math.cos( -Math.PI / 3 ) + y13;
if ( depth > 0 ) {
koch( g, depth - 1, x1, y1, x13, y13 );
koch( g, depth - 1, x13, y13, xd, yd );
koch( g, depth - 1, xd, yd, x23, y23 );
koch( g, depth - 1, x23, y23, x2, y2 );
} else {
g.drawLine( (int) x1, (int) y1, (int) x2, (int) y2 );
}
}
/**
* The main program for the KochscheKurve class
*
* @param args The command line arguments
*/
public static void main( String[] args ) {
KochscheKurve graf = new KochscheKurve();
graf.setVisible( true );
graf.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit( 0 );
}
}
);
}
}
|