Kedama: Ein massiv-paralleles skriptgesteuertes Partikelsystem
Einführung
Kedama ist japanisch für "flauschiger Ball", oder "wolliger Ball". Die letzte Version ist Kedama 2.7.
Das Original dieser Einführung in englisch ist zu finden unter
http://www.is.titech.ac.jp/~ohshima/squeak/kedama/
1. Start
- Um Kedama zu verwenden sollte man sich von
http://www.squeakland.org die aktuelle Squeakland Version herunterladen. Diese enthält für Kedama wichtige Erweiterungen.
2. Die Kedama-Welt
- Hole 'Kedama' aus der Kedama-Kategorie des Objekt-Kataloges (Siehe Bild 0). Du bekommst ein schwarzes Rechteck.
Das ist die Kedama-Welt.
- Hole den Betrachter für das Rechteck.
- Gehe zur Kedama-Kategorie im Betrachter.
- Wähle den ersten "grab morph" -Eintrag vom Optionen-Menü der "patch"-Variable.(Siehe Bild 1)
- Lege das kleinere schwarze Rechteck irgendwo ab.(Siehe Bild 2) Dieses repräsentiert die vorgefertigte patch-Variable.
3. Hole dir ein Teilchen
- Wähle den Eintrag "add a new breed of turtle" aus dem Optionen-Menü im Betrachter der Kedama-Welt. (Siehe Bild 3)
- Lege das farbige Rechteck irgendwo auf den Bildschirm (in die Morphic-Welt). Beachte, dass jetzt in der Kedama-Welt ein Punkt
derselben entstanden ist! Die Farbe wird zufällig ausgewählt. In der folgenden Beschreibung wird die Farbe rot benutzt, wie in
Bild 4.
- Öffne den Betrachter für das farbige Rechteck. Der Betrachter gehört zu einem Objekt mit dem Namen "turtle1".
| Bild 3 |
 |
4. Atome
- Zieh die "gehe vorwärts um"-Kachel der turtle auf den Bildschirm um ein Skript zu erzeugen.
- Starte das Skript (Zustand "laufend") durch Klicken auf die Uhr. Der rote Punkt in der Kedama-Welt bewegt sich!
- Erhöhe die Anzahl der turtles, indem du den Wert in der Kachel "turtle1's turtleCount" änderst. (Siehe Bild 4)
Neu erzeugte turtles werden zufällig platziert und haben eine zufällige Richtung. Beachte, dass eine turtle auf der
gegenüberliegenden Seite wieder erscheint, wenn sie am Rand der Kedama-Welt anstößt (sie wickelt sich herum).
- Ändere die Geschwindigkeit der turtles indem du den Wert der "gehe vorwärts um"-Kachel änderst.
| Bild 4 |
 |
5. Abprallende Atome
- Öffne den Betrachter der Kedama-Welt.
- Es gibt in der Kedama-Kategorie vier verschiedene "edgeMode"-Variablen (z.B. leftEdgeMode). Probiere die verschiedenen Einstellungen aus.
Wenn du für alle vier Variablen den Modus "bouncing" einstellst, hast du abprallende Atome.
- Du kannst die Hintergrundfarbe der Kedama-Welt mit der "Kedamas Farbe"-Kachel ändern, wenn du willst.
6. Pfade
- Öffne den Betrachter der turtle und ziehe aus der "kedama turtle"-Kategorie die "patchValueIn"-Kachel in das erste Skript. (Siehe Bild 5) Ändere den Wert
in der Kachel auf "20". Die Farbe des kleineren Rechtecks wird etwas "blauer". Diese Kachel legt fest, dass der Patch mit dem
Namen "patch" an der Stelle, an der sich die turtle befindet, den Wert 20 erhält.
- Drücke auf den kleinen Aufwärts-Pfeil links von "patchValueIn" und ändere den Eintrag in "patchValueIn patch erhöhen um".
- Ändere den Wert der "turtleCount"-Kachel auf "20". Diese Kachel ist in der Kategorie "kedama turtle breed" zu finden.
- Ändere den Wert der "gehe vorwärts um"-Kachel auf "2".
- Öffne den Betrachter der patch-Variable (das kleinere Rechteck).
- Gehe zur Kedama-Kategorie.
- Ändere den Wert der "scaleMax"-Kachel auf "50".
- Ziehe die "diffusePatchVariable"-Kachel ins Skript.
- Drücke auf das gelbe Ausrufezeichen links von "patch clear". Wenn du das Skript jetzt ausführst, sieht es so aus,
als ob die turtles "qualmen". (Siehe Bild 6)
Die Befehlszeilen in einem Skript werden zeilenweise ausgeführt. Das heisst, die nächste Zeile wird erst dann ausgeführt, wenn
alles, was zur vorherigen Zeile gehört, komplett beendet ist. Zum Beispiel wird in diesem Beispiel (Bild 6) erst dann
"patch diffusePatchVariable" ausgeführt, nachdem jede turtle der turtle1-Brut die "patchValueIn:"-Aktion beendet hat.
| Bild 5 | Bild 6 |
 |
 |
7. Epidemie
Hier kannst du simulieren, die die Ansteckung mit einer Krankheit funktioniert. Jede turtle hat eine Variable "infiziert" und wenn
eine nicht-infizierte turtle eine infizierte trifft, dann steckt sie sich an.
- Erstelle zuerst eine Variable mit Namen "infiziert" für turtle1, wähle als Datentyp "Boolean". (Siehe Bild 7).
- Öffne den Betrachter der Kedama-Welt und erstelle dort eine Variable "anzahlInfizierte".
- Erstelle ein Skript wie in Bild 8. Nenne es "setup". Dieses Skript stellt den Anfangszustand her. Es setzt die Anzahl der
turtles auf 1000, alle "infiziert"-Variablen auf "falsch", die "globale" Variable "anzahlInfizierte" auf 0 und infiziert
anschließend genau eine turtle. Führe das Skript einmal aus, indem du auf das gelbe Ausrufezeichen klickst und die Kedama-Welt
sieht aus wie in Bild 7, in dem nur eine turtle rot ist und alle anderen grün sind.
- Erstelle ein weiteres Skript "einSchritt" wie in Bild 9. Hier wandern alle turtles der turtle1-Brut (turtle breed) herum und hinterlassen
einen Pfad in der patch-Variable, wenn sie infiziert sind. Wenn eine nicht-infizierte turtle einen solchen Pfad sieht, steckt
sie sich an. Schalte das Skript auf "laufend" und sieh, was passiert.
Ist dir aufgefallen, dass in beiden Skripten gleiche Zeilen vorkommen? Die kannst du in ein eigenes Skript schreiben und dieses
dann einfach ins den beiden anderen Skripten aufrufen. Ist dir die Simulation zu langsam? Erhöhe die Tick-Rate, indem du auf die
Uhr klickst und die Maus gedrückt hälst. Du erhälst ein Menü zum ändern der Rate, 50 ticks pro Sekunde sollten ausreichen.
8. Tickrate, Diffusionsrate, Verdunstungsrate, logarithmische und lineare Anzeige etc.
Wie oben schon erwähnt ist die Tick-Rate entscheidend für eine interessante Simulation. Drücke auf die Uhr eines laufenden
Skriptes und ändere die Tick-Rate. Die Diffusionsrate (Streuungsrate) legt fest, wie stark die Durchdringung pro
Tick ist, die Verdunstungsrate gibt den Zerfall pro Tick an.
Intern wird ein Slot für einen patch als 32-Bit vorzeichenloser Integer abgebildet. Es gibt zwei Arten für die Darstellung,
logarithmisch (Standard) und linear. Das wird festgelegt durch die "useLogDisplay"-Variable im Betrachter eines patches. Für die
logarithmische Darstellung wird der Wert im patch benutzt. Die Stärke hängt ab vom Wert in der "scaleMax"-Kachel. Steht dort der Wert
1 oder 0 wird er transparent dargestellt, ein Wert größer oder gleich "scaleMax" wird undurchsichtig dargestellt, und die Werte
dazwischen werden teilweise durchlässig dargestellt.
Im linearen Modus (useLogDisplay = false) wird der Wert im patch um den Wert in der "shiftAmount"-Kachel verschoben und der
resultierende Wert wird als Alpha-Wert von 0 bis 255 dargestellt. Du kannst turtles anzeigen("show") oder verstecken ("hide") mit
den ensprechenden Befehlen im turtles-Betrachter.
9. Bergauf
Turtles können den Gradienten der patch values erkennen. Siehe Ameisen-Beispiel.
10. Die Welt mit turtles füllen
Du kannst die Welt mit turtles füllen.
If you drop a sketch, you get the turtles in the sketch'es pixel pattern. See the "pixel" example.
13. Winkel und Entfernung
Siehe Pixel-Beispiel und Waldbrand-Beispiel.
Beispiele
- Das Epidemie-Beispiel ist hier.
- Das Ameisenkolonnie-Beispiel ist hier.
- Das Pixel-Beispiel ist hier.
- Das Gasbehälter-Beispiel ist hier.
- Das Waldbrand-Beispiel ist hier.
- Das Diffusions-Beispiel ist hier.
Kontakt
Yoshiki Ohshima
Viewpoints Research Institute
1209 Grand Central
Glendale, CA 91201
Übersetzer:
Rita Freudenberg
Universität Magdeburg,
FIN-ISG
PSF 4120
39014 Magdeburg
rita (at) isg.cs.uni-magdeburg.de