Java & JavaScript


Home
Applets
   3D:
 · Würfel
 · Würfel 2
 · Würfel 3
 · Tetraeder
 · Tetraeder 2
 · Dodekaeder
 · Ikosaeder
 · Fußball
 · Kugel
 · Kugel 2
   Fraktale:
 · Apfelmännchen
 · Apfelmännchen 2
 · Apfelmännchen 3
 · Apfelmännchen MA
 · Apfelmännchen Zoom
 · Apfelmännchen Zoom 2
 · Juliamenge
 · Juliamenge MA
 · Julia-Generator
 · Koch-Kurve
 · Koch-Kurve 2
 · Hilbert-Kurve
 · Sierpinski-Dreieck
 · Sierpinski-Dreieck 2
 · Sierpinski-Dreieck 3
 · Sierpinski-Teppich
 · Pythagoras-Baum
 · Lindenmayer-System
 · Lindenmayer-System 2
   Mathematik:
 · Funktionsplotter
 · Eratosthenes-Sieb
 · Miller-Rabin-Test
   Verschiedenes:
 · Morsezeichen-Ticker
 · Analoguhr
Scripts
Gäste
Kontakt

- Applets : Fraktale : Koch-Kurve 2 -


Die fraktale Koch-Kurve in geschlossener Form.

Mehr Zacken per linkem Mausklick ! - Zurücksetzen mit rechtem Mausklick.

[Die geschlossene fraktale Koch-Kurve als Java-Applet mit Quellcode zum Download. Das Applet lässt sich allerdings nur mit aktiviertem Java betrachten !]


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