# Matematyka

Jeśli najprostszą formą danych są liczby, najprostszym sposobem powiązywania tych liczb jest matematyka. Od prostych operatorów, takich jak dzielenie czy funkcje trygonometryczne, po bardziej złożone formuły — matematyka stanowi doskonały sposób na rozpoczęcie badania zależności i wzorców między liczbami.

### Operatory arytmetyczne

Operatory to zestaw komponentów, w których używane są funkcje algebraiczne z dwiema wejściowymi wartościami liczbowymi dającymi jedną wartość wyjściową (dodawanie, odejmowanie, mnożenie, dzielenie itp.). Można je znaleźć w obszarze Operatory > Operacje.

| Ikona | Nazwa (składnia)      | Dane wejściowe             | Dane wyjściowe |
| ----- | --------------------- | -------------------------- | -------------- |
| !     | Dodawanie (**+**)     | var\[]...\[], var\[]...\[] | var\[]...\[]   |
| !     | Odejmowanie (**-**)   | var\[]...\[], var\[]...\[] | var\[]...\[]   |
| !     | Mnożenie (\*\*\*\*\*) | var\[]...\[], var\[]...\[] | var\[]...\[]   |
| !     | Dzielenie (**/**)     | var\[]...\[], var\[]...\[] | var\[]...\[]   |

## Ćwiczenie: formuła złotej spirali

> Pobierz plik przykładowy, klikając poniższe łącze.
>
> Pełna lista plików przykładowych znajduje się w załączniku.

{% file src="<https://2069116583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FT8P36P8hlroW5MOSGuXc%2Fuploads%2Fgit-blob-39a7667b6043060109d860513bbfd00f141abb98%2FBuilding%20Blocks%20of%20Programs%20-%20Math.dyn?alt=media>" %}

### Część I. Formuła parametryczna

Połącz operatory i zmienne, aby utworzyć bardziej złożone zależności za pomocą **formuł**. Użyj suwaków, aby utworzyć formułę, którą można sterować za pomocą parametrów wejściowych.

1. Utwórz sekwencję liczb reprezentującą „t” w równaniu parametrycznym. Lista powinna być wystarczająco duża, aby można było zdefiniować spiralę.

**Number Sequence**: zdefiniuj sekwencję liczb w oparciu o trzy wejścia: *start, amount* i *step*.

!

2\. W powyższym kroku utworzono listę liczb definiujących dziedzinę parametryczną. Następnie utwórz grupę węzłów reprezentujących równanie złotej spirali.

Złota spirala jest zdefiniowana jako równanie:

$$
x = r cos θ = a cos θ e^{bθ}
$$

$$
y = r sin θ = a sin θe^{bθ}
$$

Poniższa ilustracja przedstawia złotą spiralę w postaci programowania wizualnego. Podczas przechodzenia przez grupę węzłów należy zwrócić uwagę na analogię pomiędzy programem wizualnym a równaniem pisemnym.

!

> a. **Number Slider**: dodaj dwa suwaki liczb do obszaru rysunku. Suwaki te reprezentują zmienne *a* i *b* równania parametrycznego. Te elementy reprezentują stałą, która jest elastyczna, lub parametry, które można dostosować do żądanego wyniku.
>
> b. **Multiplication (\*)**: węzeł mnożenia jest reprezentowany przez gwiazdkę. Użyjemy tego wielokrotnie, aby połączyć zmienne mnożenia.
>
> c. **Math.RadiansToDegrees**: wartości „*t*” muszą zostać przekształcone w stopnie w celu ich oszacowania w funkcjach trygonometrycznych. Należy pamiętać, że podczas szacowania tych funkcji dodatek Dynamo domyślnie obsługuje wartości w stopniach.
>
> d. **Math.Pow**: jako funkcja wartości „*t*” i liczby „*e*” tworzy to ciąg Fibonacciego.
>
> e. **Math.Cos i Math.Sin**: te dwie funkcje trygonometryczne będą różnicować współrzędną x i współrzędną y każdego punktu parametrycznego.
>
> f. **Watch**: teraz widzimy, że wynik to dwie listy — współrzędne *x* i *y* punktów użytych do wygenerowania spirali.

### Część II. Od formuły do geometrii

Teraz zestaw węzłów z poprzedniego kroku będzie działać poprawnie, ale to sporo pracy. Aby utworzyć wydajniejszy proces roboczy, zapoznaj się z częścią [DesignScript](https://primer2.dynamobim.org/pl/8_coding_in_dynamo/8-1_code-blocks-and-design-script/2-design-script-syntax) w celu definiowania ciągu wyrażeń Dynamo w jednym węźle. W następnej serii kroków przeanalizujemy używanie równania parametrycznego do rysowania spirali Fibonacciego.

**Point.ByCoordinates:** połącz górny węzeł multiplication z wejściem *„x”*, a dolny — z wejściem *„y”*. Na ekranie pojawi się spirala parametryczna punktów.

!

**Polycurve.ByPoints:** połącz węzeł **Point.ByCoordinates** z poprzedniego kroku z węzłem *points*. Węzeł *connectLastToFirst* możemy pozostawić bez wejścia, ponieważ nie tworzymy krzywej zamkniętej. Spowoduje to utworzenie spirali przechodzącej przez każdy punkt zdefiniowany w poprzednim kroku.

!

Mamy gotową spiralę Fibonacciego. Przekształcimy to jeszcze bardziej w dwóch osobnych ćwiczeniach, tworząc kształty nautilusa i słonecznika. Są to abstrakcje systemów naturalnych, ale zapewni to dobrą reprezentację tych dwóch różnych zastosowań spirali Fibonacciego.

### Część III. Od spirali do nautilusa

**Circle.ByCenterPointRadius:** użyjemy tutaj węzła circle z tymi samymi wejściami co w poprzednim kroku. Domyślną wartością promienia jest *1,0*, dlatego natychmiast widoczne będą wyniki okręgów. Od razu staje się jasne, w jaki sposób te punkty odbiegają dalej od początku.

!

**Number Sequence:** jest to oryginalny szyk „*t*”. Przez połączenie tej pozycji z wartością **Circle.ByCenterPointRadius** środki okręgów wciąż odbiegają dalej od początku, ale promień okręgów rośnie, tworząc interesujący wykres okręgów Fibonacciego.

Jeszcze lepiej, jeśli uda Ci się przekształcić go w wykres 3D.

!

### Część IV. Od nautilusa do ulistnienia

Mamy już powłokę nautilusa — przejdźmy do siatek parametrycznych. Użyjemy podstawowego obrotu na spirali Fibonacciego, aby utworzyć siatkę Fibonacciego, a wynik zostanie wymodelowany na wzór [rosnących nasion słonecznika](https://blogs.unimelb.edu.au/sciencecommunication/2018/09/02/this-flower-uses-maths-to-reproduce/).

Punktem wyjścia będzie ten sam krok co w poprzednim ćwiczeniu: utworzenie szyku spirali punktów za pomocą węzła **Point.ByCoordinates**.

Następnie wykonaj te minikroki, aby wygenerować serię spiral o różnych obrotach.

!

> a. **Geometry.Rotate:** dostępnych jest kilka opcji **Geometry.Rotate**. Należy pamiętać, aby wybrać węzeł z wejściami *geometry*, *basePlane* i *degrees*. Połącz węzeł **Point.ByCoordinates** z wejściem geometry. Kliknij prawym przyciskiem myszy ten węzeł i upewnij się, że skratowanie jest ustawione na Iloczyn wektorowy
>
> b. **Plane.XY:** połącz z wejściem *basePlane*. Wykonamy obrót wokół początku, który ma to samo położenie co podstawa spirali.
>
> c. **Number Range:** na potrzeby wartości wejściowej w stopniach utworzymy wiele obrotów. Można to zrobić szybko za pomocą węzła **Number Range**. Połącz to z wejściem *degrees*.
>
> d. **Number:** aby zdefiniować zakres liczb, dodaj trzy węzły number do obszaru rysunku w kolejności pionowej. Od góry do dołu przypisz odpowiednio wartości *0,0, 360,0* i *120,0*. Sterują one obrotem spirali. Zwróć uwagę na wyniki z wyjścia węzła **Number Range** po połączeniu trzech węzłów number z tym węzłem.

Nasz wynik zaczyna przypominać wir. Dostosuj niektóre parametry węzła **Number Range** i obserwuj, jak zmieniają się wyniki.

Zmień rozmiar kroku (step) węzła **Number Range** z *120,0* na *36,0*. Zwróć uwagę, że w ten sposób powstaje więcej obrotów, co zapewnia gęstszą siatkę.

!

Zmień rozmiar kroku (step) węzła **Number Range** z *36,0* na *3,6*. Daje to teraz dużo gęstszą siatkę, a kierunkowość spirali jest niejasna. W ten sposób utworzyliśmy słonecznik.

!
