# 数学

如果最简单的数据形式是数字，则将这些数字关联起来的最简单方法是通过数学。从除法等简单的运算符到三角函数，再到更复杂的公式，Math 是开始探索数值关系和模式的好方法。

### 算术运算符

运算符是一组组件，这些组件使用具有两个数字输入值的代数函数，这些结果产生一个输出值（加、减、乘、除等）。这些可在“运算符”>“操作”下找到。

| 图标 | 名称（语法）          | 输入                         | 输出           |
| -- | --------------- | -------------------------- | ------------ |
| !  | 相加 (**+**)      | var\[]...\[], var\[]...\[] | var\[]...\[] |
| !  | 相减 (**-**)      | var\[]...\[], var\[]...\[] | var\[]...\[] |
| !  | 相乘 (\*\*\*\*\*) | var\[]...\[], var\[]...\[] | var\[]...\[] |
| !  | 相除 (**/**)      | var\[]...\[], var\[]...\[] | var\[]...\[] |

## 练习：黄金螺旋公式

> 单击下面的链接下载示例文件。
>
> 可以在附录中找到示例文件的完整列表。

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

### 第 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-cn/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 螺旋！让我们从此处开始进一步研究两个独立的练习，我们称之为 Nautilus 和 Sunflower。这些是自然系统的抽象表示，但 Fibonacci 螺旋的两种不同应用将得到充分体现。

### 第 III 部分：从螺旋到 Nautilus

**Circle.ByCenterPointRadius**：我们将在此处使用“Circle”节点，其输入与上一步相同。半径值默认为 *“1.0”*，因此可以看到圆即时输出。这些点与原点之间的分离程度立即清晰可辩。

!

**Number Sequence**：这是 *“t”* 的原始数组。通过将其连接到 **“Circle.ByCenterPointRadius”** 的半径值，圆心仍会与原点进一步偏离，但圆的半径不断增大，从而创建一个时髦的 Fibonacci 圆图形。

如果使其成为三维形式，可获得奖励积分！

!

### 第 IV 部分：从 Nautilus 到 Phyllotaxis

现在的情况是，我们已创建一个圆形 Nautilus 壳，接下来我们转到参数化栅格。我们将在 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”** 连接到几何图形输入。在该节点上单击鼠标右键，并确保将连缀设置为“叉积”
>
> 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”*。现在，我们得到更密集的栅格，但螺旋的方向性尚不清楚。女士们，先生们：我们创建了一颗向日葵。

!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/zh-cn/5_essential_nodes_and_concepts/5-3_the-building-blocks-of-programs/2-math.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
