|
- Applets : Fraktale : Koch-Kurve 2 -
Die fraktale Koch-Kurve in geschlossener Form.
Mehr Zacken per linkem Mausklick ! - Zurücksetzen mit rechtem Mausklick.
KochKurve2.java
import java.applet.*;
import java.awt.*;
public class KochKurve2 extends Applet {
int level = 1;
public void init() {
setBackground(new Color(240,248,255));
}
public boolean mouseDown(Event ev, int x, int y) {
if (!ev.metaDown()) level += 1;
else if (level>1) level -= 1;
repaint();
return true;
}
public void paint(Graphics g) {
// drei normale Kochkurven, jeweils um 120 Grad versetzt
double x1=10, y1=310, angle=-Math.PI/3;
for (int i=0; i<3; i++) {
drawCurve(g,x1,y1,angle,350,level);
x1 += 350*Math.cos(angle);
y1 += 350*Math.sin(angle);
angle += 2*Math.PI/3;
}
}
private void drawCurve(Graphics g, double x1, double y1,
double angle1, double sideLength, int level) {
// (x1,y1), (x2,y2), (x3,y3), (x4,y4) = Startpunkte für die Teilstrecken
// sideLength = Länge einer Teilstrecke
// angle = Winkel zwischen den Teilstrecken
// Jede Teilstrecke wird eindeutig durch einen Startpunkt,
// einen Winkel und eine Länge definiert
// Anzahl der Teilstrecken = 3*4^(level-1), level 1 = gleichseitiges Dreieck
double x2, y2, angle2, x3, y3, angle3, x4, y4;
if (level>1) {
// Übergebene Teilstrecke in vier neue Teilstrecken zerlegen
sideLength /= 3;
level -= 1;
// erste Teilstrecke
drawCurve(g, x1,y1, angle1, sideLength, level);
// zweite Teilstrecke
x2 = x1+sideLength*Math.cos(angle1);
y2 = y1+sideLength*Math.sin(angle1);
angle2 = angle1-Math.PI/3;
drawCurve(g, x2,y2, angle2, sideLength, level);
// dritte Teilstrecke
x3 = x2+sideLength*Math.cos(angle2);
y3 = y2+sideLength*Math.sin(angle2);
angle3 = angle1+Math.PI/3;
drawCurve(g, x3,y3, angle3, sideLength, level);
// vierte Teilstrecke
x4 = x3+sideLength*Math.cos(angle3);
y4 = y3+sideLength*Math.sin(angle3);
// angle4 = angle1
drawCurve(g, x4,y4, angle1, sideLength, level);
}
else {
// Teilstrecke zeichnen
g.drawLine((int)x1,(int)y1,
(int)(x1+sideLength*Math.cos(angle1)),(int)(y1+sideLength*Math.sin(angle1)));
}
}
}
Interessanterweise war es gerade eine merkwürdige Eigenschaft, die auch die geschlossene Koch-Kurve besitzt, welche Benoit Mandelbrot auf die richtige Spur zur fraktalen Erkenntnis brachte und zu seiner bahnbrechenden Untersuchung über die Küstenlänge Großbritanniens führte. Nämlich die, dass eine unendliche Kurve, eine endliche Fläche umschließen kann.
Download Koch_Kurve_2.zip (Applet und Code ca. 2 kb)
© 2001-2004 Albert Kluge - Alle Rechte vorbehalten
Impressum | Datenschutz | Nutzung | eMail
|