Grundlagen der funktionsorientierten Programmierung mit SCHEME/Fraktale
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SchemeJS</language>
[[Bild:Mandelbrot1.png|miniatur|hochkant=1.5|Die vielleicht berühmteste fraktale Struktur: Das Apfelmännchen]]
Der Begriff '''Fraktal''' (lat. fractus "gebrochen") geht auf den französisch-US-amerikanischen Mathematiker '''Benoît Mandelbrot''' (* 20. November 1924; † 14. Oktober 2010) zurück. Mit ihm werden natürliche oder künstliche Gebilde bzw. geometrische Muster bezeichnet, die einen hohen Grad an Selbstähnlichkeiten aufweisen.
'''Hinweis:''' Zur Implementation fraktaler Figuren stehen Ihnen auch hier die [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Turtle-Befehle|Sprachelemente der Turtle-Grafik]] zur Verfügung.
== Das Sierpinski-Dreieck ==
Diese selbstähnliche Figur ist nach dem polnischen Mathematiker '''Wacław Franciszek Sierpiński''' (* 14. März 1882; † 21. Oktober 1969) benannt. Die nachfolgende Abbildung zeigt die Konstruktion dieses Dreiecks:
<blockquote>[[Bild: Sierpinski1.GIF]]</blockquote>
'''Implementation:'''
<table cellspacing="0" cellpadding="2">
<tr>
<td valign="top">
<canvas w="380" h="400"></canvas>
</td>
<td valign="top" width="100%">
<code id="5378849cc5bda">
(define dreieck
(lambda (turtle len)
...))
(define sierpinski
(lambda (turtle len n)
(if (= n 1)
(dreieck turtle len)
(begin
...))))
(define sierpinski-dreieck
(lambda (len n)
(clear canvas1)
(move turtle1 100 300)
...))
</code>
<run id="5378849cc5da9">
(sierpinski-dreieck 300 6)
</run>
</td>
</tr>
</table>
== Die Koch-Schneeflocke ==
Der schwedische Mathematiker '''Helge von Koch''' (* 25. Januar 1870; † 11. März 1924) stellte im Jahr 1904 einen stetigen Graphen vor, der an keiner Stelle differenzierbar ist.
Die sogenannte Koch-Schneeflocke setzt sich aus drei dieser Koch-Kurven zusammen, die auf den Seiten eines gleichseitigen Dreiecks angeordnet sind:
<blockquote>[[Bild: Kochkurve1.GIF]]</blockquote>
'''Implementation:'''
<table cellspacing="0" cellpadding="2">
<tr>
<td valign="top">
<canvas w="380" h="400"></canvas>
</td>
<td valign="top" width="100%">
<code id="5378849cc5d01">
(define koch
(lambda (turtle len n)
(if (= n 1)
(forward turtle len)
(begin
...))))
(define koch-schneeflocke
(lambda (len n)
(clear canvas2)
(move turtle2 150 270)
...))
</code>
<run id="5378849cc5e35">
(koch-schneeflocke 300 6)
</run>
</td>
</tr>
</table>
== Die Peano-Kurve ==
Der italienische Mathematiker '''Giuseppe Peano''' (* 27. August 1858; † 20. April 1932) konstruierte eine raumfüllende Kurve, die mit zunehmender Rekursionstiefe punktweise konvergiert.
'''Implementation:'''
<table cellspacing="0" cellpadding="2">
<tr>
<td valign="top">
<canvas w="380" h="400"></canvas>
</td>
<td valign="top" width="100%">
<code id="5d2e30809bcbc">
(define kurve
(lambda (turtle vz len)
(forward turtle (/ (* 2 len) 3))
(right turtle (* vz 90))
(forward turtle (/ len 3))
(right turtle (* vz 90))
(forward turtle (/ (* 2 len) 3))
(left turtle (* vz 90))
(forward turtle (/ len 3))
(left turtle (* vz 90))
(forward turtle (/ (* 2 len) 3))))
(define peano
(lambda (turtle vz len n)
(if (= n 1)
(kurve turtle vz len)
(begin
(peano turtle vz (/ len 3) (- n 1))
(forward turtle (/ len (expt 3 n)))
(peano turtle (- vz) (/ len 3) (- n 1))
(forward turtle (/ len (expt 3 n)))
(peano turtle vz (/ len 3) (- n 1))
(right turtle 90) (forward turtle (* vz (/ len (expt 3 n)))) (right turtle 90)
(peano turtle (- vz) (/ len 3) (- n 1))
(forward turtle (/ len (expt 3 n)))
(peano turtle vz (/ len 3) (- n 1))
(forward turtle (/ len (expt 3 n)))
(peano turtle (- vz) (/ len 3) (- n 1))
(left turtle 90) (forward turtle (* vz (/ len (expt 3 n)))) (left turtle 90)
(peano turtle vz (/ len 3) (- n 1))
(forward turtle (/ len (expt 3 n)))
(peano turtle (- vz) (/ len 3) (- n 1))
(forward turtle (/ len (expt 3 n)))
(peano turtle vz (/ len 3) (- n 1))))))
(define peano-kurve
(lambda (len n)
(clear canvas3)
(move turtle3 40 340)
(peano turtle3 1 len n)))
</code>
<run id="5d2e30809bd80">
(peano-kurve 300 3)
</run>
</td>
</tr>
</table>
Zurück zu [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Rekursionen|Rekursionen]].