Update Grundlagen, Zusammenlegen Fraktale + Digitales Gut authored by Stephan Moesle's avatar Stephan Moesle
In diesem Kapitel werden die Grundlagen zu Digitalen Gütern und Fraktalen erläutert. # Digitales Gut
Digitale Güter bestehen aus Binärdaten und dienen der Bedürfnisbefriedigung. Informationsgüter können ebenfalls in Form von digitalen Gütern vorliegen und sind häufig durch ihre Beschaffenheit oft leicht zu vervielfältigen. Diese Problematik im Umgang mit digitalen Gütern besteht nun schon seit einigen Jahren. So stellt es sich als extrem schwer heraus Güter wie Musikdateien zu schützen und damit die Gütermenge kontrollieren zu können. Durch diesen Umstand gelten digitale Güter als schwer sammelbar. Allerdings gibt es Lösungen, wie die Spiele [CSGO]( https://csgostash.com/)(mittels Skins) und [CryptoKitties](https://www.cryptokitties.co/), um das Sammeln von digitalen Gütern möglich zu machen.
## Eigenschaften
Die Besonderheit am Projekt CryptoKitties stellt die technische Umsetzung dar. Durch das Verwenden von Tokens, gespeichert über die Blockchain, besteht die Möglichkeit, digitale Katzen Besitzern klar zuzuordnen. Zudem besteht die Möglichkeit neue Katzen zu generieren, indem man durch Kombination bestimmter Eigenschaften neue Katzen erzeugt. Die grafischen Eigenschaften einer Katze werden hierbei unterschiedlich kategorisiert und durch einen Algorithmus kombiniert (Farbe, Gesicht, etc.).
Die **grafische Darstellung** und die **Möglichkeit der Kombination** (Interaktion) stellten sich als zwei wesentliche Merkmale für die Wahl eines möglichen Gutes heraus.
Als geeignetes Gut wurden [Fraktale](https://git.dhbw-stuttgart.de/wi16274/projekt-collectibles/wikis/Fraktale) ausgewählt. Fraktale lassen sich digital darstellen und besitzen eine Vielzahl an Merkmalen, die zur Kombination mit anderen Fraktalen genutzt werden können.
# Fraktale
Fraktale (lat. "fractus" = "gebrochen") sind komplexe geometrische Figuren.
Sie weisen einen hohen Grad an Skaleninvarianz bzw. Selbstähnlichkeit auf. d.h. bei der Vergrößerung eines Ausschnitts die Struktur des Fraktals immer wieder erkennbar ist, weshalb man auch sagt Fragmente haben "Details auf allen Stufen".
![Visualisierung Koch-Kurve](https://media.giphy.com/media/lQ9KVVuMluZfa/giphy.gif)
[Visualisierung Koch-Kurve](https://media.giphy.com/media/lQ9KVVuMluZfa/giphy.gif)
## L-Systeme
Zur Erzeugung von Fraktalen, können sog. Lindenmayer-Systeme (L-Systeme) verwendet werden.
Hierbei handelt es sich um ein Ersetzungssystem, bei dem Einzelteile eines Objektes sukzessive ersetzt werden. Hierfür werden sog. Produktionsregeln verwendet.
Insgesamt werden drei Komponenten für ein L-System benötigt (Im folgenden anhand einer Zeichenkette erklärt):
* **Alphabet (V)**: Das Alphabet eines L-Systems besteht aus den gültigen Zeichen, die aufgenommen werden können. Beispielsweise das Alphabet "ABC" setzt voraus, dass jeder gültige "Satz" (eine Zeichenkette) in einem L-System nur diese drei Zeichen enthalten kann.
* **Axiom (ω)**: Das Axiom ist ein Satz (bestehend aus Buchstaben aus dem Alphabet), der den Ausgangszustand des Systems beschreibt. Zum Beispiel sind beim Alphabet "ABC" einige Beispiel-Axiome "AAA" oder "B" oder "ACBAB".
* **Regeln (P)**: Die Regeln eines L-Systems werden auf das Axiom angewendet und dann rekursiv angewendet, wodurch immer wieder neue Sätze entstehen. Eine L-Systemregel beinhaltet zwei Sätze, einen "Vorgänger" und einen "Nachfolger". Beispielsweise wird mit der Regel "A -> AB", wenn ein "A" in einer Zeichenkette gefunden wird, durch "AB" ersetzt.
L-Systeme sind heute allgemein bekannt als parameterbasierte L-Systeme, definiert als Tupel: **G = (V, ω, P)**
Es folgt als Beispiel Lindenmayers ursprüngliches L-System zur Modellierung des Algenwachstums:
```
Alphabet : A B
Axiom : A
Regeln : (A → AB), (B → A)
```
Hiervon ausgehend werden folgende Zeichenketten erstellt:
```
n=0: A Start (Axiom)
/ \
n=1: A B Ursprüngliches A wird zu AB (A → AB)
/| \
n=2: A B A A wird zu AB (A → AB), B wird zu A
/ | | | \
n=3: A B A A B ...
/ | | | \ | \ \
n=4: A B A A B A B A ...
```
Setzt man die L-Systeme in Bezug zu den Fraktalen, werden den Buchstaben Aktionen zum Zeichnen der Fraktalen zugeordnet.
Häufig wir das Alphabet "FG+-" verwendet:
```
F: Zeichne eine Linie und gehe vorwärts.
G: Vorwärts bewegen (ohne eine Linie zu zeichnen)
+: Rechts abbiegen
-: Links abbiegen
```
Bei den Parametern + und - ist hierbei zusätzlich noch relevant, in welchem Winkel das Abbiegen erfolgt.
### Modellierung von klassischen Fraktalen
| Fraktale | L-System | Winkel | Streckenverhältnis | Visualisierung |
|:-:|:-:|:-:|:-:|:-:|
| Koch-Flocke | `Axiom: F--F--F` <br> `Regel: F → F+F--F+F` | 60° | 1:1/3 | <img src="http://www.michael-holzapfel.de/schuelerseite/mathenuss/schneeflocke/b_schneefl2.gif" alt="Kochsche Schneeflocke" title="Kochsche Schneeflocke" height="100" /> |
| Sierpinski-Dreieck | `Axiom: F--F--F` <br> `Regel 1: F → F--F--F--ff` <br> `Regel 2: f → ff` | 60° | 1:1/3 | <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/SierpinskiTriangle.svg/1024px-SierpinskiTriangle.svg.png" alt="Sierpinski Dreieck" title="Sierpinski Dreieck" height="100" /> |
| Lévy-C-Kurve | `Axiom: F` <br> `Regel: F → +F--F+` | 45° | 1:1/1,45 | <img src="https://upload.wikimedia.org/wikipedia/commons/4/4c/C_kurve.png" alt="Lévy-C-Kurve" title="Lévy-C-Kurve" height="100" /> |
Da es sich hierbei um einen rekursiven Aufruf handelt, muss die Anzahl an Iterationen festgelegt werden, um ein Bild darzustellen. Die folgende Abbildung zeigt die Erscheinungsformen der Koch-Kurve, abhängig von den Iterationen.
<img src="https://fractalfoundation.org/wp-content/uploads/2010/05/kochprog440.jpg" alt="Kochkurve" width="200"/>
## Gene
Die Erscheinungsform des digitalen Guts soll durch ein Integer beschrieben werden.
Hierbei handelt es sich um die Anreihung der Ausprägungen der verschiedenen Merkmale des Guts.
<img src="uploads/50a67694f334ea3dbf3cbc6b699a8571/Beispiel_Gene.png" height="170">
Im Fall von [Fraktalen](https://git.dhbw-stuttgart.de/wi16274/projekt-collectibles/wikis/Fraktale), sind die verschiedenen Merkmale:
* `Winkel` - Ausprägung zwischen 0 und 360°
* `Polygon` - Anzahl der Seiten eines Polygons. Ausprägung zwischen 1 und ...
* `Segmente`-
* `Spiegelung` - Ausprägung zwischen 0 (nein) und 1 (ja)
* `Iterationen`- Ausprägung zwischen 1 und ...
* `Farbe (RGB)`- 3 x Ausprägung zwischen 0 und 255
* `Rarität` - Ausprägung zwischen 1 und ...
* `Arme` - Anzahl der Arme zwischen 1 und ...
* `Verzerrung` (skew) - Ausprägung zwischen 0 und 540°
![Gene_Fraktal](uploads/0407e366208998ad685881bc82497ee4/Gene_Fraktal.png)
<p align="right"> <p align="right">
<a href="https://git.dhbw-stuttgart.de/wi16274/projekt-collectibles/wikis/Digitales-Gut">Nächste Seite</a> <a href="https://git.dhbw-stuttgart.de/wi16274/projekt-collectibles/wikis/Architektur">Nächste Seite</a>
</p> </p>