Lévy-C-Kurve
Die Lévy-C-Kurve ist, in der Mathematik, eine selbstähnliche fraktale Kurve, die erstmals 1906 von Ernesto Cesàro und 1910 von Georg Faber beschrieben und deren Differenzierbarkeitseigenschaften analysiert wurden, die jedoch heute den Namen des französischen Mathematikers Paul Lévy trägt. Lévy war der Erste, der die Selbstähnlichkeitseigenschaften der Kurve beschrieb und eine geometrische Konstruktion von ihr erstellen konnte, die sie als repräsentative Kurve innerhalb derselben Klasse wie die Koch-Kurve zeigte. Die Lévy-C-Kurve ist ein Sonderfall einer Periodenverdopplungskurve, bzw. einer De-Rham-Kurve.
Aufbau des L-Systems
Falls man ein Lindenmayer-System (L-System) verwendet, beginnt die Konstruktion der Lévy-C-Kurve mit einer geraden Linie. Mit dieser Linie als Hypotenuse wird ein gleichschenkliges Dreieck mit Winkeln von 45 °, 90 ° und 45 ° erstellt. Die ursprüngliche Linie wird dann durch diese anderen zwei Seiten des Dreiecks ersetzt.
Im zweiten Schritt bilden die zwei neuen Linien jeweils die Basis für ein weiteres rechtwinkliges gleichschenkliges Dreieck und werden durch die beiden anderen Seiten ihres jeweiligen Dreiecks ersetzt. Also erscheint die Kurve nach zwei Schritten als drei Seiten eines Rechtecks mit der gleichen Länge wie die ursprüngliche Linie, aber nur halb so breit.
In jedem nachfolgenden Schritt wird jedes gerade Liniensegment in der Kurve durch die anderen zwei Seiten eines darauf aufgesetzten rechtwinkligen gleichschenkligen Dreiecks ersetzt. Nach n
Schritten besteht die Kurve aus Liniensegmenten, von denen jedes um den Faktor kleiner ist als die ursprüngliche Linie.
Das L-System der Kurve kann wie folgt beschrieben werden:
- Variable(n)
F
- Konstant(e)
- Start
F
- Regel(n)
Die einzelnen Elemente des L-Systems kann man wie folgt definieren:
F
- vorwärts ziehen
- 45 ° im Uhrzeigersinn drehen
- 45 ° gegen den Uhrzeigersinn drehen
Die Lévy-C-Kurve ist die Fraktalkurve die die Grenze dieses „unendlichen“ Prozesses ist. Der Name ist eine Anspielung auf die Ähnlichkeit der Kurve mit einer sehr verzierten Version des Buchstaben „C“. Die Kurve ähnelt ebenfalls den feineren Details eines Pythagoras-Baums.
Die Hausdorff-Dimension der C-Kurve gleicht 2 (sie beinhaltet offene Mengen), während der Rand eine Dimension von etwa 1,9340 hat.[1]
- Variationen
Die Standard C-Kurve wird aus 45 ° gleichschenkligen Dreiecken erstellt.
Variationen der C-Kurve können durch die Verwendung gleichschenkliger Dreiecke mit anderen Winkeln als 45 ° konstruiert werden. Solange der Winkel weniger als 60 ° beträgt, sind die in jedem Schritt eingeführten neuen Linien jeweils kürzer als die Linien, die sie ersetzen, sodass der Erstellungsprozess zu einer Grenzkurve tendiert. Winkel von weniger als 45 ° erzeugen einen Fraktal, der weniger fest „geringelt“ ist.
IFS Konstruktion
Wenn man ein iteriertes Funktionensystem (IFS, oder das Chaosspiel, bzw. die IFS-methode) verwendet, dann ist die Konstruktion der C-Kurve etwas einfacher. Eine Menge bestehend aus zwei „Regeln“ wird dazu benötigt, nämlich: Zwei Punkte auf einer Ebene mit einem Skalierfaktor von . Die erste Regel ist eine Drehung von 45 ° und die zweite −45 °. Diese Menge wird einen Punkt [x
, y
] iterieren, indem per Zufall eine der zwei Regeln ausgewählt wird und die Parameter, die mit der Regel verbunden sind, um den Punkt zu skalieren oder zu drehen mittels einer 2D-Transformationsfunktion.
In Formeln ausgedrückt:
von der ursprünglichen Menge an Punkten .
Muster Umsetzung der Lévy-C-Kurve
// Muster Umsetzung der Lévy-C-Kurve in Java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.util.concurrent.ThreadLocalRandom;
public class C_Kurve extends JPanel {
public float x, y, län, alpha_winkel;
public int iteration_n;
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
c_kurve(x, y, län, alpha_winkel, iteration_n, g2d);
}
public void c_kurve(double x, double y, double län, double alpha_winkel, int iteration_n, Graphics2D g) {
double fx = x;
double fy = y;
double länge = län;
double alpha = alpha_winkel;
int it_n = iteration_n;
if (it_n > 0) {
länge = (länge / Math.sqrt(2));
c_kurve(fx, fy, länge, (alpha + 45), (it_n - 1), g); // Rekursiver Aufruf
fx = (fx + (länge * Math.cos(Math.toRadians(alpha + 45))));
fy = (fy + (länge * Math.sin(Math.toRadians(alpha + 45))));
c_kurve(fx, fy, länge, (alpha - 45), (it_n - 1), g); // Rekursiver Aufruf
} else {
Color[] A = {Color.RED, Color.ORANGE, Color.BLUE, Color.DARK_GRAY};
g.setColor(A[ThreadLocalRandom.current().nextInt(0, A.length)]); // Um verschiedene Farbwerte auszuwählen
g.drawLine((int) fx, (int) fy, (int) (fx + (länge * Math.cos(Math.toRadians(alpha)))), (int) (fy + (länge * Math.sin(Math.toRadians(alpha)))));
}
}
public static void main(String[] args) {
C_Kurve punkte = new C_Kurve();
punkte.x = 200; // x-Wert festlegen
punkte.y = 100; // y-Wert festlegen
punkte.län = 150; // Längenwert festlegen
punkte.alpha_winkel = 90; // Winkelwert festlegen
punkte.iteration_n = 15; // Iterationswert festlegen
JFrame frame = new JFrame("Punkte");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(punkte);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Siehe auch
Literatur
- S. Bailey, T. Kim, R. S. Strichartz: Inside the Lévy dragon. In: American Mathematical Monthly. 109, Nr. 8, 2002, S. 689–703.
- E. Cesaro: Fonctions continues sans dérivée. In: Archiv der Math. und Phys. 10, 1906, S. 57–63.
- G. Faber: Über stetige Funktionen II. In: Math. Annalen. 69, 1910, S. 372–443.
- Paul Lévy: Plane or Space Curves and Surfaces Consisting of Parts Similar to the Whole. 1938, reproduziert in Gerald A. Edgar (Hrsg.): Classics on Fractals. 1993 Addison-Wesley Publishing, ISBN 0-201-58701-7.
Weblinks
Einzelnachweise
- Eric W. Weisstein: Lévy Fractal Wolframs MathWorld, zuletzt modifiziert am 18 März 2021, Abgerufen am 19. März 2021.