1.3.3. Mathematik, Funktionen & Konditionale
Beispiedateien zu diesem Abschnitt: http://grasshopperprimer.com/appendix/A-2/1_gh-files.html
Zu wissen, wie man mit numerischen Informationen umgeht, ist eine grundlegende Fertigkeit, die Du lernen musst, um Grasshopper zu nutzen. Grasshopper enthält viele Komponenten, um mathematische Operationen auszuführen, Konditionale auszuwerten und Mengen von Zahlen zu manipulieren.
In der Mathematik werden Zahlen in Mengen organisiert und es gibt zwei mit denen Du wahrscheinlich bekannt bist:
Integer Zahlen: […, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, …]
Reelle Zahlen: [8, …, -4.8, -3.6, -2.4, -1.2, 0.0, 1.234, e, 3.0, 4.0, …, 8]
Neben anderen Zahlenmengen, die es gibt, interessieren uns diese beiden am meisten, da Grasshopper diese bevorzugt verwendet. Obwohl es Grenzen in der Darstellung dieser Mengen gibt und diese in einer digitalen Umgebung genau definiert sind, können wir sie mit einem hohen Grad an Präzision annähern. Zusätzlich sollten wir die Unterscheidung zwischen integralen Zahlenarten (integers) and Gleitkommazahlen (real numbers) als Unterschied zwischen einer diskreten und einer kontinuierichen Domäne verstehen. In diesem Kapitel werden wir verschiedene Methoden für die Arbeit mit und die Auswertung von verschiedenen Zahlenmengen erkunden.
1.3.3.1. DER MATH REITER
Die meisten Komponenten, die mit mathematischen Operationen und Funktionen zu tun haben, können unter den folgenden Unterkategorien des "Math" Reiters gefunden werden:
- Domänen werden benutzt, um die Bandbreite von Werten (früher als Intervalle bekannt) zwischen zwei Werten zu definieren. Die Komponenten unter dem "Domain" Reiter erlauben es Dir verschiedene Domänen zu schaffen oder zu zerlegen.
- In der Mathematik organisiert eine Matrix eine Reihe von Zahlen in Zeilen und Spalten. Diese Unterkategorie enthält eine Reihe von nützlichen Werkzeugen, um Matrizen zu schaffen und zu verändern.
- Operatoren werden genutzt, um mathematische Operationen, wie Addition, Subtraktion, Multiplikation, u.a. auszuführen. Konditionale Operatoren erlauben es festzulegen, ob eine Menge von Zahlen größer als, kleiner als, oder gleich groß im Vergleich zu einer anderen Menge ist.
- Polynome sind eines der wichtigsten Konzepte in Algebra, Mathematik und Wissenschaft. Du kannst die Komponenten aus dieser Unterkategorie nutzen, um Fakultäten, Logarithmen oder Exponentiale zu berechnen.
- Die "Script" Unterkategorie enthält Einzel- und Multivariabel- Ausdrücke, sowie VB.NET and C# Komponenten zur Entwicklung von Skripten.
- Diese Komponenten ermöglichen es Dir trigonometrische Funktionen, wie Sinus, Kosinus und Tangent zu berechnen.
- Die "Time" Unterkategorie hat eine Anzahl von Komponenten, die es Dir erlauben Instanzen von Datum und Zeit zu erstellen.
- Die Unterkategorie "Utility" ist ein Sack von Komponenten, die in einer Bandbreite von mathematischen Gleichungen angewendet werden können. Suche hier, wenn Du versuchst Minima oder Maxima über zwei Listen von Zahlen zu finden oder den Durchschnitt einer Menge von Zahlen zu berechnen.
1.3.3.2. OPERATOREN
Wie bereits genannt, sind Operatoren eine Menge an Komponenten, die algebraische Funktionen mit zwei numerischen Eingabevariablen nutzen, welche in der Ausgabe eines einzelnen Wertes resultieren.
Die meiste Zeit wirst Du die mathematischen Operatoren in arithmetischen Prozessen im Bezug auf eine Zahlenmenge finden. Jedoch können diese Operatoren auch auf verschiedene Datentypen, inkl. Punkte und Vektoren angewendet werden.
1.3.3.3. KONDITIONALE OPERATOREN
Fast jede Programmiersprache hat eine Methode, um konditionale Ausdrücke auszuwerten. In den meisten Fällen wird der Programmierer ein Stück Code entwerfen, welches eine einfache Frage wie "Was wäre wenn?" stellt. Was wäre wenn die Fläche einer Stockwerksumgrenzung einen realistischen Betrag überschreitet? Diese wichtigen Fragen stellen eine höhere Ebene der Abstraktion da. Computerprogramme haben die Möglichkeit auszuwerten "was wäre wenn" und entsprechende Aktionen auf die Antwort der Frage folgen zu lassen. Lass uns einen Blick auf ein einfaches Konditional werfen, das ein Programm interpretieren würde: Wenn das Objekt eine Kurve ist, lösche es. Das Stück Code schaut zuerst auf das Objekt und stellt in einer boolschen Variable fest, ob es sich dabei um eine Kurve handelt. Der boolsche Wert ist "wahr", wenn das Objekt eine Kurve ist oder "falsch", wenn das Objekt keine Kurve ist. Der zweite Teil des Ausdrucks führt eine Aktion entsprechend dem Ergebnis des konditionalen Ausdrucks aus; in diesem Fall wird das Objekt gelöscht, wenn es keine Kurve sein sollte. Dieser konditionale Ausdruck wird "If Statement"genannt. In diesem Kontext gibt es vier konditionale Operatoren (in der "Math/Operators" Unterkategorie), die Konditionale auswerten und boolsche Werte ausgeben.
Die "Equality" Komponente nimmt zwei Listen und vergleicht die ersten Elemente der Liste A mit dem ersten Element der Liste B. Wenn die beiden Werte dieselben sind, wird "Wahr" als boolscher Wert ausgegeben; auf der anderen Seite, wenn die beiden Werte ungleich sind, wird "Falsch" ausgegeben. Die Komponente rotiert durch die Liste in Übereinstimmung mit dem "Data Matching" Algorithmus (als Standard ist die Einstellung "Longest List"). Es gibt zwei Ausgabeparameter für diese Komponente. Der erste gibt eine Liste mit boolschen Werten aus, die angibt, welcher der Werte in der einen Liste mit einem in der anderen Liste übereinstimmt. Der zweite Ausgabeparameter gibt eine Liste aus, die zeigt welche Werte nicht gleich den entsprechenden Werten in der zweiten Liste sind - oder eine invertierte Liste im Vergleich zum ersten Ausgabeparameter.
Die "Similarity" Komponente wertet die Daten von zwei Listen aus und prüft diese auf Ähnlichkeit der beiden Zahlen. Sie ist beinahe identisch mit dem Verhalten der "Equality" Komponente, jedoch mit einer Ausnahme: sie hat einen prozentualen Eingabeparameter, der es erlaubt ein Verhältnis der zulässigen Abweichung zwischen Werten der Liste A und der Liste B anzugeben, ausserhalb derer Ungleichheit angenommen wird. Die "Similarity" Komponente hat ausserdem einen Ausgabeparameter, der in absoluten Werten angibt, welche Distanz zwischen den Werten der beiden Listen liegt.
Die "Larger Than" Komponente wird die Daten aus zwei Listen vergleichen und bestimmen, ob der erste Wert von Liste A größer ist als der erste Wert von Liste B. Die beiden Ausgabeparameter erlauben es Dir festzulegen, ob Du die beiden Listen entsprechend der größer als (>) oder größer als oder gleich (>=) Funktion auswerten möchtest.
Die "Smaller Than" Komponente verhält sich entgegengesetzt zur "Larger Than" Komponente. Die "Smaller Than" Komponente bestimmt, ob die Werte einer Liste A kleiner sind als die Werte einer Liste V und gibt die entsprechenden boolschen Werte aus. Ähnlich wie zuvor, kannst Du mit den beiden Ausgabeparametern wählen, ob Du die Listen entsprechend der kleiner als (<) oder kleiner als oder gleich (<=) Funktion auswerten willst.
1.3.3.4. TRIGONOMETRIE KOMPONENTEN
Beispieldateien für diesen Abschnitt: http://grasshopperprimer.com/appendix/A-2/1_gh-files.html
Wir haben bereits gezeigt, dass wir eine "Expression" (oder "Evaluate") Komponente nutzen können um konditionale Ausdrücke, sowie algebraische Gleichungen auswerten zu können. Jedoch gibt es auch andere Wege, um einfache Ausdrücke mit ein paar eingebauten trigonometrischen Funktionen zu berechnen. Wir können diese Funktionen nutzen, um periodische Phänomene zu beschreiben, wie beispielsweise sinusartige Wellenformen, wie Wellen im Ozean, Schallwellen und Lichtwellen.
- Line
y(t) = 0
- Sine Curve
y(t) = sin(t)
- Helix
x(t) = cos(t)
y(t) = sin(t)
z(t) = b(t)
- Spiral
x(t) = t*cos(t)
y(t) = t*cos(t)
In diesem Beispiel werden wir Grasshopper benutzen, um verschiedene trigonometrische Kurven mit den trigonomischen Funktionskomponenten aus dem "Math"-Reiter zu beschreiben:
Wir habe gerade eine Linie erzeugt, indem wir eine Reihe von Punkten zu einer Kurve verbunden haben. Lass uns nun versuchen die Trigonometriekomponenten in Grasshopper zu nutzen, um die Kurve zu verändern:
Eingabeparameter derConstruct Point Komponente||
|19.| Verbinde ein zweites Kabel vom Punkt X (X) Ausgabeparameter der Deconstruct Komponente mit dem Wert (x) Eingabeparameter der Sine Komponente||
|20.| Verbinde den Ergebnis (y) Ausgabeparameter der Sine Komponente mit dem Y Koordinate (Y) Eingabeparameter der Construct Point Komponente
Wir haben nun unsere Punkte mit den gleichen x-Werten rekonstruiert und dabei die y-Werte mit der Sinuskurve modifiziert.|| |21.| Verbinde den Punkt (Pt) Ausgabeparameter der Construct Point Komponente mit dem Eckpunkte (V) Eingabeparameter derInterpolate Komponente|||
</li>
Du solltest nun eine Sinuskurve entlang der x-Achse in Rhino sehen
</li>
Wir haben nun eine dreidimensionale Helix
Du solltest nun eine spiralförmige Kurve sehen
1.3.3.5. EXPRESSIONS
Beispieldateien für diesen Abschnitt: http://grasshopperprimer.com/appendix/A-2/1_gh-files.html
Die "Expression" Komponente (und ihr Bruder die "Evaluate" Komponente) sind sehr flexible Werkzeuge; dazu ist zu sagen, dass sie für eine Vielzahl von verschiedenen Anwendungen genutzt werden können. Wir können die "Expression" (oder die "Evaluate" Komponente) heranziehen, um mathematische Algorithmen auszuwerten und numerische Daten als Ausgabeparameter zurückzugeben.
In den folgenden Beispielen werden wir uns mathematische Spiralen ansehen, die in der Natur gefunden werden können, und wie wir mit wenigen Funktionskomponenten ähnliche Muster in Grasshopper erzeugen können. Wir werden in unserer Definition trigonometrische Kurven als Ausgangspunkt wählen.
Doppelklicke die "Expression" Komponente, um den Grasshopper "Expression Editor" zu öffnen
Du kannst verschiedene Voronoimuster durch die Manipulation der Werte für "Factor, "Count" und "Radius" mit den Schiebereglern erzeugen. Unterhalb sind drei Beispiele:
- Factor = 1.000, Radius = 15
- Factor = 0.400, Radius = 10
- Factor = 0.200, Radius = 7