Download des MuPAD-Notebooks Save Link Taget As..., Verküpfung speichern unter...
Fraktale mit MuPAD, Wegfraktale rekursiv
Prof. Dr.Dörte Haftendorn, Jan 06 ( ehemals April 03)
________________________________________________________________________________
Inhalt....: Erzeugung von Fraktalen mit rekursiven Prozeduren
Kategorie.: Arbeitsblatt
Mathematik: Fraktale Geometrie
MuPAD.....: 3.1.1
Datum.....: 2006-01-18, (ehemals 2003-04-24)
Autoren...: Dörte Haftendorn <Haftendorn@uni.leuphana.de>
Funktionen: plot, plot::Turtle, proc
________________________________________________________________________________
LEVEL 1
Die Möglichkeiten in MuPAD 3.1 sind erheblich verbessert worden
(Woran ich nicht ganz unschuldig bin.) Somit ist nun ein LOGO-Ähnlichlicher Einstieg möglich,
den ich hier vorstellen werde, wenn ich mal wieder Zeit habe.
Kurz:
- Igel:=plot::Turtle([Forward(15),Right(PI/4),Forward(10),Right(PI/2)
,Up,Forward(10),Down,Forward(20)],LineColor=RGB::Red,LineWidth=1);
plot(Igel);
Das geht genauso wie in LOGO.
- Igel::setLineColor(RGB::Green):
Igel::left(300): Igel::forward(20): plot(Igel);
Dem Objekt Igel, das mit plot::Turtle(.....) definiert worden ist, können weitere
Befehle in seine Befehlsliste geschrieben werden. Diese werden dann klein
geschrieben Igel::forward statt Forward .
So kann man auch noch Farben umdefinieren. An die Strichdicke kommt man aber
nur bei der Definition des Objektes (was etwas schade ist).
LEVEL 2
Für Fraktale ist die einfache Befehlsliste nicht brauchbar, da geht nur das Anhängen
immer weiterer Befehle, bis das ganze Fraktal T entstanden ist.
Als Grundidee werden in Anlehnung an dieLindenmayersysteme einfacheProzeduren definiert:
- F:=proc() begin T::forward(x) end_proc:
f:=proc() begin T::penUp; T::forward(x); T::penDown; end_proc:
R:=proc() begin T::right(w)end_proc:
L:=proc() begin T::left(w)end_proc:
K:=proc() begin T::push() end_proc:
Z:=proc() begin T::pop() end_proc:
Rd:=proc() begin T::setLineColor([1,0,0]) end_proc:
Gr:=proc() begin T::setLineColor(RGB::Green) end_proc:
Bk:=proc() begin T::setLineColor(RGB::Black) end_proc:
Ma:=proc() begin T::setLineColor(RGB::Magenta)end_proc:
Eine rekursive Prozedur, d.h. eine, die sich selbst aufruft, bildet das Fraktal.
Der Initiator (Axiom) erscheint im Rekursionsanfang, in der Abbruchbedingung.
Der Generator wird ausgeschrieben, wobei der Prozedurname(n-1) anstelle von F( ) verwendet wird.
Die Weglänge muss in der Prozedur passend verkleinert werden.
Kochkurve
- koch:=proc(n) local a; begin
a:=x:
if n=1 then F(): return() end_if;
a:=x/3;
koch(n-1):L():koch(n-1):R():R():
koch(n-1):L():koch(n-1):
end_proc:
- x:=1:w:=PI/3: T := plot::Turtle(LineWidth=1): /*die Turtle wird erzeugt*/
T::right(PI/2): /* Startrichtung rechts */
T::setLineColor([0.8,0.5,0]): /* Farben im RGB-System direkt*/
koch(3):
plot(T):
- x:=1:w:=PI/3:T := plot::Turtle(LineWidth=1): /*die Turtle wird erzeugt*/
T::right(PI/6): /* Startrichtung */
n:=3:
Gr():koch(n):R():R():Ma():koch(n):R():R():Rd():koch(n):R():R():
plot(T, Axes = None,Scaling=Constrained):
Zweig-Frakal
- zweig:=proc(n) local a; begin
a:=x:
if n=1 then F():return() end_if;
a:=x/3;
zweig(n-1):K():L():Rd():zweig(n-1):Gr():Z():
zweig(n-1):K():R():Bk():zweig(n-1):Gr():Z():
zweig(n-1):
end_proc:
- Deg:=PI/180:float([45*Deg,PI/4]) /* Winkel in Grad */
- x:=1:w:=43*Deg:T := plot::Turtle(LineColor=RGB::Green):zweig(5):
plot(T):
Der Vorteil gegenüber den Lindenmayersystemen ist, dass man auf die erzeugte Turtle zugreifen
und so mehrere Stufen in ein Bild stellen kann.
- x:=27:w:=30*Deg: T := plot::Turtle(LineColor=RGB::Green):
K():zweig(1):Z():T::right(PI/2):T::forward(6):T::left(PI/2):x:=9:
K():zweig(2):Z():T::right(PI/2):T::forward(8):T::left(PI/2):x:=3:
K():zweig(3):Z():T::right(PI/2):T::forward(8):T::left(PI/2):x:=1:
K():zweig(4):Z():T::right(PI/2):T::forward(10):T::left(PI/2):x:=0.333:
zweig(5):
plot(T):
Ein weiterer Vorteil gegenüber den Lindenmayersystemen ist, dass man leichter verschiedene
Fraktale kombinieren und die Farben steuern kann. Auch die Parameter lassen sich von außen steuern.
- delete x:
dolde:=proc(n) local a; begin
a:=x:
if n=1 then Gr(): F();return(): end_if;
a:=x/3;
zweig(n-1):
K():L():Ma():dolde(n-1):Gr():Z():
K(): Bk():dolde(n-1):Gr():Z():
K():R():Ma():dolde(n-1):Gr():Z():
end_proc:
- x:=24:w:=35*Deg:T := plot::Turtle(LineColor=RGB::Green, LineWidth=0.4):
K():dolde(1):Z():T::right(PI/2):T::forward(10):T::left(PI/2):x:=12:
K():dolde(2):Z():T::right(PI/2):T::forward(20):T::left(PI/2):x:=6:
K():dolde(3):Z():T::right(PI/2):T::forward(20):T::left(PI/2):x:=3:
K():dolde(4):Z():T::right(PI/2):T::forward(20):T::left(PI/2):x:=3:
K():dolde(5):Z():T::right(PI/2):T::forward(33):T::left(PI/2):x:=0.8:
dolde(6):
plot(T):
Internetadressen dieses Web-Verbundes [www.doerte-haftendorn.de] [haftendorn.uni-lueneburg.de/mathe-lehramt]
[haftendorn.uni-lueneburg.de/ing-math]
[LBS-Mathe] [Fraktale]
Inhalt und Webbetreuung Prof. Dr. Dörte Haftendorn Apr. 2003, update 16. August 2011