back: HIB Homepage
  Prof. Urban
Materialien für Mathematik, Physik, Informatik
 
 
zurück
 

L-Systeme (0L)

Hier ein kleines Python-Skript, um L-Systeme komfortabel für POV-Ray zu erzeugen. Es erzeugt getrennte Objekte für die Linienstücke und für die Verbindungsstellen. Außerdem gibt es die Gesaamtanzahl der jeweiligen Typen in einer Variable an und numeriert jedes Teilobjekt durch. Damit kann man etwa Farbverläufe über die gesamte Länge bequem definieren.

Das Python-Skript findest Du hier zum Herunterladen. An seinem Anfang kannst Du Regeln Deiner Wahl anfügen, an seinem Ende die notwendigen Einstellungen treffen.

Vorsicht! Beginne mit kleinen Rekursionsanzahlen (1,2,..) und arbeite Dich langsam so weit wie nötig nach oben. Die Rechenzeit steigt im Allgemeinen exponentiell an!

Das Programm erstellt eine include-Datei für POV-Ray. Lade Dir als Beispiele meine POV-Ray Skripts für zwei Dimensionen und drei Dimensionen herunter. Sie sind fast identisch, nur braucht die 3D-Version klarerweise eine passende Drehung des Objektes, da die 2D-Version einfach senkrecht auf die Kurve herunterblickt.

Das 3D-Skript sieht so aus:


// LSystem test rendering 3D
// with shadowless light and some object tweaking

camera {
location <0,4,0>
look_at 0
angle 20
}

background { color <0.3,0.4,0.6> }

light_source {<2,5,0>,1 shadowless} // here it comes - the LSystem Object definition
// set radius of line segments
#declare r = 0.01;
// plain cylinders build the lines
#macro LineObject(a,b,n)
cylinder { a,b,r pigment { color rgb 1.2 } } #end // red balls as joints #macro JointObject(a,n) sphere { a,r*3.5 pigment { color rgb x }}
#end // get the object
#include "lsystest.inc"
// show it
object { LSysObject finish { ambient 0.9 diffuse 0.2 }
scale 0.7
rotate <0,0,12>
rotate <-10,0,0> }

hier die hexagonale Gosper-Kurve aus dem Python-Programm:

GRAMMAR3 = {
   'Name' : "Hex Gosper",
   'Axiom' : 'XF',
   'Winkel' : 60,
   'X' : 'X+YF++YF-FX--FXFX-YF+',
   'Y' : '-FX+YFYF++YF+FX--FX-Y'
}

und hier kommt die dreidimensionale Hilbertkurve

GRAMMAR10 = {
   'Axiom' : 'A',
   'Winkel' : 90,
   'A' : 'B-F+CFC+F-D&F^D-F+&&CFC+F+B//',
   'B' : 'A&F^CFB^F^D^^-F-D^|F^B|FC^F^A//',
   'C' : '|D^|F^B-F+C^F^A&&FA&F^C+F+B^F^D//',
   'D' : '|CFB-F+B|FA&F^A&&FB-F+B|FC//'
}

Im folgenden Bild habe ich die zweidimensionale Hilbertkurve herangezogen und den Teilobjekten eine Höhenkomponente entsprechend ihrer Laufnummer, sowie analog eine Farbe eines Verlaufs zugeordnet. Das war das Ergebnis:

Über derartige seltsame Kurven kannst Du im Mathematik-Unterricht mehr erfahren. Hilbert hat sich 'seine' Kurve 1891 als Beispiel dafür ausgedacht, dass eine eindimensionale Linie, wenn man sie nur oft genug faltet und knickt (präzise gesagt: unendlich oft), eine zweidimensionale Fläche vollständig füllen kann. In der Folge zwang das die Mathematiker, den klassischen Dimensionsbegriff zu überdenken und ganz neu zu formulieren (Das war so um 1900 herum - also viel zu modern für unsere Mathe-Lehrpläne...). In der heute für solche Objekte verwendeten 'fraktalen Ähnlichkeitsdimension' hat eine Strecke Dimension D=1, das Quadrat Dimension D=2 (so wie gewohnt). Die bekannte Schneeflockenkurve hat D=1,2619 und liegt dazwischen. Die Hilbertkurve besitzt den Dimensionswert D=2, was für eine 'klassische' Kurve ganz unmöglich wäre (keine Sorge - die klassische Mathematik kümmert sich prinzipiell nicht um derart geknickte Linien und hat deshalb auch kein Problem mit ihnen). Die 3D-Hilbertkurve, von der jedes Zwischenstadium mit fixierter Rekursionstiefe Dimension 1 besitzt, hat schlussendlich sogar Dimension 3.

 


--- © Wolfgang.Urban@schule.at ---