Funktionale Geometrie

Die funktionale Geometrie wurde von Peter Henderson 1982 in seinem Artikel "Functional Geometry" beschrieben. Es handelt sich um eine Technik, mit der Bilder erzeugt werden können. Komplexere Bilder werden durch das Anwenden von Funktionen aus einfacheren Bildern erzeugt.

Begonnen wird mit elementaren Bildern, die durch eine Menge von Strecken in einem Rechteck beschrieben werden. Dazu wird eine Funktion

grid: integer integer List(linesegment) picture

verwendet, die aus den Abmessungen des Rechtecks und der Liste der Strecken ein Bild erzeugt. Ein weiteres elementares Bild ist

nil,

das leere Bild.

Mehrere vorgegebene Funktionen erzeugen aus einfacheren Bildern anhand von zusätzlichen Angaben komplexere Bilder:

flip: picture picture
beside: integer
integer picture picture picture
above: integer
integer picture picture picture
rot: picture
picture
overlay: picture
picture picture

Mit der Funktion flip erzeugt man ein Bild, indem das Ursprungsbild an der vertikalen Achse gespiegelt wird, die das Bild halbiert. Die Funktion beside ordnet zwei Bilder nebeneinander an, wobei das Verhältnis der Breiten der Bilder durch die beiden Ganzzahlen bestimmt wird. Analog dazu ordnet die Funktion above die Bilder übereinander an. Mit der Funktion rot erhält man ein Bild, das durch Drehung der Ursprungsbildes um 90° gegen den Uhrzeigersinn entsteht. Die Funktion overlay erzeugt aus zwei Bildern ein neues Bild, das alle Stecken der beiden Ursprungsbilder enthält.

Die
funktionale Geometrie ist besonders geeignet, Bilder mit einer gewissen Regelmäßigkeit kompakt zu beschreiben. Peter Henderson illustriert das anhand eines Holzschnitts von M.C. Escher. Aus den vier elementaren Bildern p, q, r und s



wird mit den drei Hilfsfunktionen

quartet(p1, p2, p3, p4) = above(1, 1, beside(1, 1, p1, p2), beside(1, 1, p3, p4))
cycle(p1) = quartet(p1, rot(rot(rot(p1))), rot(p1), rot(rot(p1)))
nonet(p1, p2, p3, p4, p5, p6, p7, p8, p9) = above(1, 2, beside(1, 2, p1, beside(1, 1, p2, p3)), above(1, 1, beside(1, 2, p4, beside(1, 1, p5, p6)), beside(1, 2, p7, beside(1, 1, p8, p9))))

und anhand der Definitionen

t = quartet(p, q, r, s)
u = cycle(rot(q))
side1 = quartet(nil, nil, rot(t), t)
side2 = quartet(sid1, side1, rot(t), t)
corner1 = quartet(nil, nil, nil, u)
corner2 = quartet(corner1, side1, rot(side1), u)
corner = nonet(corner2, side2, side2, rot(side2), u, rot(t), rot(side2), rot(t), rot(q))
squarelimit = cycle(corner)

das resultierende Bild



was bemerkenswert ist.

Eine Open Source Realisierung der funktionalen Geometrie als Einbettung in einen
Lisp Dialekt findet sich im Functional-Geometry-Package.


Links

http://www.pen.k12.va.us/Div/Winchester/jhhs/math/lessons/calculus/escher.html
http://www.mcescher.com
http://www.frank-buss.de/lisp/functional.html


Quellen

http://www.ecs.soton.ac.uk/%7Eph/funcgeo.pdf
http://www.ecs.soton.ac.uk/%7Eph/papers/funcgeo2.pdf