3D mit Processing


Bewegungen im 3D-Gitter



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:

void draw(){
  for(int i=-1; i < 2;i++){
     for(int j=-1; j < 2;j++){
        for(int k=-1; k < 2;k++){
          gitterZeichnen(i,j,k);
        }
     }
}

void gitterZeichnen(int X, int Y, int Z){
   if(achtEZ) translate(X*s-t,Y*s-t,Z*s-t);//Gitterzentrum auf einer Ecke des Cube
   else translate(X*s,Y*s,Z*s); //Gitterzentrum in einem Cube
   noFill();
   if(kZ) stroke(200);//Kanten der Elementarzelle
   else noStroke();
   box(s);//Elementarzelle
   if(zylZeichnen)verbZylZeichnen(); //Verbindungen als Zylinder
   if(linZeichnen)verbLinZeichnen(); //Verbindungen als line
   atomeZeichnen(X,Y,Z);
   if(achtEZ) translate(-X*s+t,-Y*s+t,-Z*s+t);
   else translate(-X*s,-Y*s,-Z*s);
}

Testen Sie den zugehörigen Sketch!




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....

Diamant-Gitter

Gitter Bewegungen

Menu