Ursprünglich war das Ziel, einen Sketch zu schreiben, mit dem man ein Diamant-Gitter veranschaulichen kann.
Als dies getan war, fiel auf, dass die Einheitszelle des Diamant eine interessante geometrische Struktur aufweist:
(Bild oben links) Vier Außeneck-Atome, sechs Atome zentral auf den Seitenflächen und vier Atome im Inneren,
die jeweils 1/4 Kantenlänge von den Außenflächen entfernt sind. Ein Gitter des Atoms bekommt man, wenn man
die Einheitszelle (EZ) in Richtung von x-,y- und z-Achsen anhängt. Auf diese Weise sind dann (fast) alle acht
Ecken der EZ mit Atomen besetzt.
Und so entstand die Frage: Aus welchen elemantaren 3D-Körpern besteht die Zelle und wie verhalten sich ihre
veschiedenen Volumina. Die "Atome" und Ecken der Elementarzelle sollten dabei die Ecken der Körper bilden.
Zugegeben, eine ziemlich akademische Fragestellung!
Falls es jemanden interessiert: Die EZ besteht aus 8 Tetraedern, 12 Pyramiden und einem Oktaeder.
Bild oben rechts zeigt vier der 8 Tetraeder, Bild links unten sind zusätzlich 4 Pyramiden (blau) eingezeichnet.
Rechts daneben ist der rote Oktaeder teilweise zu sehen. Die Volumina der Summen der drei verschiedenen Körper
verhalten sich wie 2:3:1. Der zugehörige Sketch "Diamant" kann für eigene Experimente am Ende dieser Seite
heruntergeladen werden.
Wir benützen nun das Diamant-Gitter, um einen Vogelschwarm zu simulieren. Das Bild unten soll unser Vorhaben
veranschaulichen. Links oben: Vierzehn "Vögel" (Würfel) in einem kleinen Bereich (Elementarzelle).
Die hier grünen Verbindungslinien (Zylinder) sollen den Abstand symbolisieren, den die Vögel zu ihren Nachbarn einhalten.
Das Flattern der Flügel stellen wir als Rotation der Würfel dar. (Okay, zugegeben, Vögel drehen sich beim Flug, wenn
überhaupt, höchstens um ihre Längsachse. Der wahre Grund, weshalb hier Drehungen programmiert werden, ist, dass in mehreren
Rückmeldungen geklagt wurde, dass die noch deutlich komplexeren Drehungen im vorherigen Kapitel, für den Anfang
zu schwer seien. Für sie ist dieser Sketch gedacht.)
Zudem kann sich der Schwarm als Ganzes in jede beliebige Richtung drehen. Dies ist für die Würfel in dem
kleinen Bereich rechts daneben dargestellt. Der "Schwarm" soll sich auch fortbewegen. Damit er nicht aus dem
Bildschirm verschwindet, fliegt er an einer Kugeloberfläche entlang.
Nun gehen wir von der Elementarzelle zum Gitter über: Links unten sind acht Elementarzellen
dargestellt, rechts daneben sind es schon 27. Durch Doppelbelegung sind es hier etwas weniger als 378 Würfel, die
unter Einhaltung des Abstands, bewegt werden sollen. Sieht kompliziert aus - ist es aber nicht. Das liegt
daran, dass wir nur eine EZ berechnen müssen und diese dann einfach in die drei Raumrichtungen angehängt werden.
(Die hier eingezeichneten Kanten der EZ sind nur des besseren Verständnisses wegen mit eingezeichnet. Will man
aus den komplexen Bewegungen eine Bildschirmschoner erzeugen, dann werden diese natürlich weggelassen. )
Der entscheidende Gedanke dabei ist, eine dreifache Schleife zu erstellen. Ihre drei Indices verwendet man dann
zur Positionierung der EZ. So könnte der Code aussehen:
Tasten- oder Mausaktion | Wirkung |
---|---|
Taste 1 | Einheitszelle zeichnen |
Taste 2 | Gitter aus 8 Einheitszellen |
Taste 3 | Gitter aus 27 Einheitszellen |
Taste k | Kanten der Elementarzelle zeichnen/löschen |
Taste l | Verbindungen mit Zylindern darstellen/löschen |
Taste x | Eckatome um x-Achse stoppen/drehen |
Taste y | Seitenmitten-Atome um y-Achse stoppen/drehen |
Taste z | Innen-Atome um z-Achse stoppen/drehen |
Taste e | Farbe der Würfel ändern |
Um alle Würfel besser beobachten zu können, wurden sie mit Teiltransparenz gezeichnet. Die Darstellung
mit 27 Elementarzellen läuft möglicherweise nicht flüssig. Verzichtet man auf die Verbindungszylinder
(Taste 'l'), könnte das die Situation verbessern.
Übrigens: Mit einem Programmfenster so groß wie der Bildschirm, bekommt man einen hübschen Bildschirmschoner....