> 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/zh-tw/5_essential_nodes_and_concepts/5-3_the-building-blocks-of-programs/2-math.md).

# 數學

如果資料最簡單的形式是數字，則關聯這些數字最簡單的方式就是透過數學運算。從諸如除號等簡單運算子到三角函數，再到更複雜的公式，數學是開始探索數字關係與樣式的良好方式。

### 算術運算子

運算子是一組元件 (加、減、乘、除等)，使用代數函數與兩個數字輸入值，產生一個輸出值。在「運算子」>「動作」下可以找到這些運算子。

| 圖示 | 名稱 (語法)      | 輸入                        | 輸出           |
| -- | ------------ | ------------------------- | ------------ |
| !  | 加 (**+**)    | var\[]...\[]、var\[]...\[] | var\[]...\[] |
| !  | 減 (**-**)    | var\[]...\[]、var\[]...\[] | var\[]...\[] |
| !  | 乘 (**\\**\*) | var\[]...\[]、var\[]...\[] | var\[]...\[] |
| !  | 除 (**/**)    | var\[]...\[]、var\[]...\[] | var\[]...\[] |

## 練習：黃金螺旋線公式

> 按一下下方的連結下載範例檔案。
>
> 附錄中提供完整的範例檔案清單。

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

### 第 I 部分：參數式公式

透過**公式**結合運算子和變數，以構成更複雜的關係。使用滑棒建立可透過輸入參數控制的公式。

1. 建立表示參數式方程式中「t」的數字序列，因此，我們希望使用大到足以定義螺旋線的清單。

**Number Sequence：** 根據以下三項輸入定義數字序列：*start、amount* 與 *step*。

!

2.上述步驟已建立用於定義參數範圍的數字清單。接下來，建立表示黃金螺旋線方程式的節點群組。

定義黃金螺旋線的方程式如下：

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

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

以下影像以視覺程式設計形式表示黃金螺旋線。逐步檢查節點群組時，請盡可能注意視覺程式與書寫方程式之間的對應。

!

> a.**Number Slider**：在圖元區加入兩個數字滑棒。這些滑棒代表參數式方程式中的 *a* 與 *b* 變數。這些表示彈性的常數，或表示我們可以針對所需結果進行調整的參數。
>
> b.**相乘 (\*)**：相乘節點由星號表示。我們會重複使用此符號連接相乘的變數
>
> c.**Math.RadiansToDegrees**：「*t*」值需要轉換為度，才能在三角函數中演算。請記住，Dynamo 預設使用度來運算這些函數。
>
> d.**Math.Pow**：以「*t*」與數字「*e*」表示的函數，此函數會建立 Fibonacci 序列。
>
> e.**Math.Cos 與 Math.Sin**：這兩個三角函數將分別區分每個參數式點的 X 座標與 Y 座標。
>
> f.**Watch**：現在可以看到輸出是兩個清單，分別是產生螺旋線所用點的 *x* 與 *y* 座標。

### 第 II 部分：從公式到幾何圖形

現在，上一步的眾多節點都沒問題，但工作量很大。若要建立更有效率的工作流程，請參閱 [DesignScript](/zh-tw/8_coding_in_dynamo/8-1_code-blocks-and-design-script/2-design-script-syntax.md) 將 Dynamo 表示式的字串定義為一個節點。在接下來的一系列步驟中，我們將瞭解使用參數式方程式來繪製 Fibonacci 螺旋線。

**Point.ByCoordinates：** 將上方的相乘節點連接到「*x*」輸入，將下方的節點連接到「*y*」輸入。我們現在可以在螢幕上看到點的參數式螺旋線。

!

**Polycurve.ByPoints：** 將上一步的 **Point.ByCoordinates** 連接到 *points*。我們可以保留 *connectLastToFirst* 無輸入，因為不打算繪製封閉曲線。這會建立一條穿過上一步定義的每個點的螺旋線。

!

我們現在完成了 Fibonacci 螺旋線！接下來進一步將此分為兩個單獨的練習，我們分別稱之為鸚鵡螺與向日葵。這些是自然系統的抽象名稱，但可以充分呈現 Fibonacci 螺旋線的兩種不同應用。

### 第 III 部分：從螺旋線到鸚鵡螺

**Circle.ByCenterPointRadius：** 我們在此處將使用圓節點，採用與上一步相同的輸入。半徑的預設值為 *1.0*，所以我們可以立即看到輸出的圓。它會立即清晰展示點如何進一步偏離原點。

!

**Number Sequence：** 這是「*t*」的原始陣列。將此序列插入 **Circle.ByCenterPointRadius** 的半徑值後，圓心仍會離原點越來越遠，但半徑會增加，因而產生很酷的 Fibonacci 圓形。

如果您使用 3D 製作會更酷！

!

### 第 IV 部分：從鸚鵡螺到葉序

現在我們已經建立圓形的鸚鵡螺殼，接下來使用參數式格線。我們將對 Fibonacci 螺旋線使用基本旋轉，以建立 Fibonacci 格線，並在[向日葵種子長大後](https://blogs.unimelb.edu.au/sciencecommunication/2018/09/02/this-flower-uses-maths-to-reproduce/)對結果進行塑型。

一開始，我們先執行上一個練習中的相同步驟：使用 **Point.ByCoordinates** 節點建立點的螺旋線陣列。

接下來，依照這些小步驟，以各種旋轉產生一系列螺旋線。

!

> a.**Geometry.Rotate：** 有幾個 **Geometry.Rotate** 選項，請確保選擇以 *geometry*、*basePlane* 和 *degrees* 為輸入的節點。將 **Point.ByCoordinates** 連接至 geometry 輸入。在此節點上按一下右鍵，並確保將交織設定為「笛卡兒積」
>
> b.**Plane.XY：** 連接至 *basePlane* 輸入。我們將繞原點旋轉，此原點的位置與螺旋線的基準位置相同。
>
> c.**Number Range：** 對於角度輸入，我們希望建立多個旋轉。使用 **Number Range** 元件可以快速達成。將其連接至 *degrees* 輸入。
>
> d.**Number：** 為了定義數字範圍，在圖元區以垂直順序加入三個數字節點。從上到下分別指定值為 *0.0、360.0* 與 *120.0*。這些值將驅動螺旋線旋轉。請注意將三個數字節點連接至 **Number Range** 節點後的輸出結果。

輸出開始形成一個漩渦。接下來調整某些 **Number Range** 參數，並查看結果的變化。

將 **Number Range** 節點的步長大小從 *120.0* 變更為 *36.0*。請注意，這會建立更多旋轉，因此會產生更密的格線。

!

將 **Number Range** 節點的步長大小從 *36.0* 變更為 *3.6*。現在，這會產生密度大得多的格線，螺旋線的方向性變得不清楚。各位，我們產生了一朵向日葵。

!
