> For the complete documentation index, see [llms.txt](https://primer2.dynamobim.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://primer2.dynamobim.org/it/5_essential_nodes_and_concepts/5-3_the-building-blocks-of-programs/2-math.md).

# Matematica

Se il formato più semplice di dati è rappresentato dai numeri, il modo più semplice per correlare tali numeri è la matematica. Dai semplici operatori come la divisione fino alle funzioni trigonometriche e alle formule più complesse, la matematica è un ottimo modo per iniziare ad esplorare relazioni e modelli numerici.

### Operatori aritmetici

Gli operatori sono un insieme di componenti che utilizzano funzioni algebriche con due valori di input numerico, che producono un valore di output (addizione, sottrazione, moltiplicazione, divisione e così via). Questi sono disponibili in Operators > Actions.

| Icona                                                                                                                                                                                                        | Nome (Sintassi)  | Input                      | Output       |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | -------------------------- | ------------ |
| ![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-efd3ef3b5c38f8bb05d541e85c376b52f1d66853%2Faddition.jpg?alt=media)       | Add (**+**)      | var\[]...\[], var\[]...\[] | var\[]...\[] |
| ![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-ba0feee3728ac2584efc5697a67d76c38252c636%2FSubtraction.jpg?alt=media)    | Subtract (**-**) | var\[]...\[], var\[]...\[] | var\[]...\[] |
| ![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-ed2b8d9518a8acdde96a20f704a8ca7ff743e0a0%2FMultiplication.jpg?alt=media) | Multiply ( \* )  | var\[]...\[], var\[]...\[] | var\[]...\[] |
| ![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-a7c57cbf45f33e5fb54b8310fbd0c1d684a6c983%2FDivision.jpg?alt=media)       | Divide (**/**)   | var\[]...\[], var\[]...\[] | var\[]...\[] |

## Esercizio: Formula della spirale aurea

> Scaricare il file di esempio facendo clic sul collegamento seguente.
>
> Un elenco completo di file di esempio è disponibile nell'Appendice.

{% file src="/files/zEaaRAI5np5WxmucTucG" %}

### Parte I: Formula parametrica

Combinare operatori e variabili per formare una relazione più complessa mediante le **formule**. Utilizzare i dispositivi di scorrimento per creare una formula che possa essere controllata con i parametri di input.

1. Creare una sequenza di numeri che rappresenta la "t" nell'equazione parametrica, pertanto si desidera utilizzare un elenco di dimensioni sufficienti per definire una spirale.

**Number Sequence:** definire una sequenza di numeri in base a tre input: *start, amount* e *step*.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-8abeb717522065d1d87d176bc43fbd9dc48e932e%2Fmath%20-%20part%20I-01.jpg?alt=media)

2\. Con il passaggio precedente è stato creato un elenco di numeri per definire il dominio parametrico. Quindi, creare un gruppo di nodi che rappresenta l'equazione della spirale aurea.

La spirale aurea viene definita come l'equazione:

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

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

L'immagine seguente rappresenta la spirale aurea sotto forma di programmazione visiva. Quando si scorre il gruppo di nodi, provare a prestare attenzione al parallelo tra il programma visivo e l'equazione scritta.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-8441927e4ac411850851c4b086a7f9f1bcd16c79%2Fmath%20-%20part%20I-02.jpg?alt=media)

> a. **Number Slider:** aggiungere due dispositivi di scorrimento numerici all'area di disegno. Questi dispositivi di scorrimento rappresenteranno le variabili *a* e *b* dell'equazione parametrica. Rappresentano una costante flessibile o parametri che è possibile regolare per ottenere il risultato desiderato.
>
> b. **Multiplication (\*)**: il nodo della moltiplicazione è rappresentato da un asterisco. Questa opzione verrà utilizzata ripetutamente per collegare le variabili della moltiplicazione.
>
> c. **Math.RadiansToDegrees:** i valori "*t*" devono essere convertiti in gradi per la loro valutazione nelle funzioni trigonometriche. Tenere presente che, in Dynamo, per default vengono utilizzati i gradi per valutare queste funzioni.
>
> d. **Math.Pow:** come funzione di "*t*" e del numero "*e*" si crea la sequenza di Fibonacci.
>
> e. **Math.Cos e Math.Sin:** queste due funzioni trigonometriche differenziano rispettivamente la coordinata x e la coordinata y di ogni punto parametrico.
>
> f. **Watch:** ora è possibile vedere che l'output comprende due elenchi, che saranno le coordinate *x* e *y* dei punti utilizzati per generare la spirale.

### Parte II: Dalla formula alla geometria

Ora, la maggior parte dei nodi del passaggio precedente funzionerà correttamente, ma richiede molto lavoro. Per creare un workflow più efficiente, esaminare [DesignScript](/it/8_coding_in_dynamo/8-1_code-blocks-and-design-script/2-design-script-syntax.md) per definire una stringa di espressioni di Dynamo in un nodo. In questa serie successiva di passaggi, verrà utilizzata l'equazione parametrica per disegnare la spirale di Fibonacci.

**Point.ByCoordinates:** collegare il nodo della moltiplicazione superiore all'input "*x*" e quello inferiore all'input "*y*". Viene visualizzata una spirale parametrica di punti sullo schermo.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-5123619ea0d811eef05fdd217f9ced4ebda70a32%2Fmath%20-%20part%20II-01.gif?alt=media)

**Polycurve.ByPoints:** collegare **Point.ByCoordinates** del passaggio precedente a *points*. È possibile lasciare *connectLastToFirst* senza input perché non si sta creando una curva chiusa. In questo modo si crea una spirale che passa per ogni punto definito nel passaggio precedente.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-ccd9226c2c2ad6c78964ab0798a78082550757ec%2Fmath%20-%20part%20II-02.jpg?alt=media)

A questo punto è stata completata la spirale di Fibonacci. Da qui procedere ulteriormente con due esercizi separati, che si chiameranno Nautilus e Girasole. Si tratta di astrazioni di sistemi naturali, ma le due diverse applicazioni della spirale di Fibonacci saranno ben rappresentate.

### Parte III: Dalla spirale a Nautilus

**Circle.ByCenterPointRadius:** in questo caso, verrà utilizzato un nodo Circle con gli stessi input del passaggio precedente. Il valore di default del raggio è *1.0*, pertanto viene visualizzato un output immediato dei cerchi. Diventa immediatamente evidente l'ulteriore divergenza dei punti rispetto all'origine.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-133911082a9041313f8b103d4f3a54c9cd21d69b%2Fmath%20-%20part%20III-01.jpg?alt=media)

**Number Sequence:** questa è la serie originale di "*t*". Collegando questo valore al valore del raggio di **Circle.ByCenterPointRadius**, i centri dei cerchi sono ancora più divergenti dall'origine, ma il raggio dei cerchi aumenta, creando uno stravagante grafico a forma di cerchio di Fibonacci.

Punti bonus se lo si rende 3D.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-7f06d3094b0dfe84e6193b2b7bd40fd0ad6e698f%2Fmath%20-%20part%20III-02.gif?alt=media)

### Parte IV: Da Nautius a Phyllotaxis

Ora che è stata creata una conchiglia Nautilus circolare, si può passare alle griglie parametriche. Si utilizzerà una rotazione di base sulla spirale di Fibonacci per creare una griglia di Fibonacci e il risultato verrà modellato dopo la [crescita dei semi di girasole](https://blogs.unimelb.edu.au/sciencecommunication/2018/09/02/this-flower-uses-maths-to-reproduce/).

Come punto di partenza, iniziare con lo stesso passaggio dell'esercizio precedente: la creazione di una serie di punti della spirale con il nodo **Point.ByCoordinates**.

<figure><img src="https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-a6de3a9c3bd224222ac722a7b2774cb3004f6d27%2Fmath%20-%20part%20IV-01.jpg?alt=media" alt=""><figcaption></figcaption></figure>

Quindi, seguire questi mini passaggi per generare una serie di spirali con rotazione diversa.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-c68e343db940f4a82815015a5ad61ed932adac91%2Fmath%20-%20part%20IV-02.jpg?alt=media)

> a. **Geometry.Rotate:** sono disponibili diverse opzioni di **Geometry.Rotate**; assicurarsi di aver scelto il nodo con *geometry*, *basePlane* e *degrees* come input. Collegare **Point.ByCoordinates** all'input geometry. Fare clic con il pulsante destro del mouse su questo nodo e verificare che il collegamento sia impostato su Globale.
>
> <img src="https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-da412ce3d50ac4cf4bba5d9997665d119adb0cd1%2Fmath%20-%20part%20IV-03%20cross%20product.jpg?alt=media" alt="" data-size="original">
>
> b. **Plane.XY:** collegare all'input *basePlane*. Si ruoterà attorno all'origine, che è la stessa posizione della base della spirale.
>
> c. **Range:** per l'input degrees, si desidera creare più rotazioni. È possibile farlo rapidamente con un componente di **Range**. Collegarlo all'input *degrees*.
>
> d. **Number:** per definire l'intervallo di numeri, aggiungere tre nodi di numeri all'area di disegno in ordine verticale. Dall'alto verso il basso, assegnare rispettivamente i valori di *0.000, 360.000* e *120.000*. Questi determinano la rotazione della spirale. Notare i risultati di output del nodo **Range** dopo aver collegato i tre nodi di numero al nodo stesso.

L'output sta iniziando a somigliare ad un vortice. Regolare alcuni dei parametri di **Range** e vedere come cambiano i risultati.

Modificare la dimensione di incremento del nodo **Range** da *120.000* a *36.600*. Notare che in questo modo si creano più rotazioni e quindi si fornisce una griglia più densa.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-6829af295f22e12e509750ded3fc41a21aaa6ea1%2Fmath%20-%20part%20IV-04.jpg?alt=media)

Modificare la dimensione di incremento del nodo **Range** da *36.000* a *3.600*. In questo modo si ottiene una griglia molto più densa e la direzionalità della spirale non è chiara. Ecco, è stato creato un girasole.

![](https://977504712-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcjugM499QmKp4nEs1EdU%2Fuploads%2Fgit-blob-e58f7644843fff511ac6cd6466220269ea111a46%2Fmath%20-%20part%20IV-05.jpg?alt=media)
