/*
* Datei: Pythagoras.java
*
* Beispiel fuer Objektrekursion
*
*/
import java.io.*;
import java.applet.* ;
import java.awt.* ;
import java.lang.Math.* ;
public class Pythagoras extends Applet
{
private PBaum p ; // Startinstanz des Baumes
public class PBaum
{
private int YH = 400 ; // Breite des sichtbaren Fensters
private Graphics g ; // Graphics-Kontext des Applets
private Point a ; // Punkt a des Quadrates
private Point b ; // Punkt b des Quadrates
private int depth ; // erreichte Tiefe des Quadrates
private void xyLine ( Point x, Point y, Color c )
{
g.setColor(c);
g.drawLine( x.x, YH-x.y ,y.x, YH-y.y ); // umdrehen der Koordinaten
// da oben eigentlich 0 ist
}
public PBaum()
{
}
public void drawTree (Graphics _g )
{
g = _g ;
if (depth==0) return ; // Tiefste Tiefe erreicht
Point l = new Point( a.y-b.y,b.x-a.x ) ; // die neuen Punkte berechnen
Point c = new Point( b.x+l.x,b.y+l.y ) ;
Point d = new Point( a.x+l.x,a.y+l.y ) ;
xyLine ( a , b , Color.magenta ) ; // das Quadrat zeichnen
xyLine ( b , c , Color.magenta ) ;
xyLine ( c , d , Color.magenta ) ;
xyLine ( d , a , Color.magenta ) ;
Point e = new Point( (int)(d.x + 0.36*(c.x-d.x) + 0.48*l.x) ,
(int)(d.y + 0.36*(c.y-d.y) + 0.48*l.y) ) ;
PBaum leftTree = new PBaum() ; // neue Baumobjekte erzeugen
PBaum rightTree= new PBaum() ;
leftTree.setOrigin ( e,c ) ; // des Ursprung der Objekte setzen
rightTree.setOrigin ( d,e ) ;
leftTree.setDepth ( depth-1 ) ;// die neue Tiefe setzen
rightTree.setDepth ( depth-1 ) ;
leftTree.drawTree(g) ; // die Objekte zeigen
rightTree.drawTree(g) ;
}
public void setOrigin ( Point _a , Point _b )
{
a = _a ;
b = _b ;
}
public void setDepth ( int _depth )
{
depth = _depth ;
}
}
public void paint(Graphics g)
{
p.drawTree(g) ; // immer wenn das Applet gezeichnet wird soll
// auch der Baum neu gezeichnet werden.
}
public void start()
{
p = new PBaum() ; // Baumobjekt erzeugen
p.setOrigin(new Point(200,10),new Point(280,10)) ; // den Ursprung setzen
p.setDepth(10) ; // die zu zeichnende Tiefe setzen
}
}
|