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

# Math

Числа являются самой простой формой данных, а самым простым способом связать эти числа между собой является математика. Начиная от элементарных операторов, таких как деление, и заканчивая тригонометрическими функциями и более сложными формулами, математика — отличный способ начать знакомство с отношениями и закономерностями в мире чисел.

### Арифметические операторы

Оператор — это набор компонентов, в которых используются алгебраические функции с двумя входными числовыми значениями, результатом которых является одно выходное значение (сложение, вычитание, умножение, деление и т. д.). Они находятся в разделе «Операторы» > «Действия».

| Значок | Имя (синтаксис)        | Входные данные             | Выходные данные |
| ------ | ---------------------- | -------------------------- | --------------- |
| !      | Сложение (**+**)       | var\[]...\[], var\[]...\[] | var\[]...\[]    |
| !      | Вычитание (**–**)      | var\[]...\[], var\[]...\[] | var\[]...\[]    |
| !      | Умножение (\*\*\*\*\*) | var\[]...\[], var\[]...\[] | var\[]...\[]    |
| !      | Деление (**/**)        | var\[]...\[], var\[]...\[] | var\[]...\[]    |

## Упражнение «Формула золотой спирали»

> Скачайте файл с примером, щелкнув ссылку ниже.
>
> Полный список файлов примеров можно найти в приложении.

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

### Часть 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. **Multiplication (\*)**. Узел умножения обозначен звездочкой. Он будет часто использоваться для соединения умножаемых переменных
>
> c. **Math.RadiansToDegrees.** Значения «*t*» необходимо преобразовать в градусы для их оценки в тригонометрических функциях. Следует помнить, что для оценки этих функций в Dynamo по умолчанию используются градусы.
>
> d. **Math.Pow.** В качестве функции «*t*» и числа «*e*» этот узел создает последовательность Фибоначчи.
>
> e. **Math.Cos и Math.Sin.** С помощью этих двух тригонометрических функций будут различаться координаты X и Y (соответственно) для каждой параметрической точки.
>
> f. **Watch.** В качестве выходных данных отображается два списка, которые будут выступать в качестве координат *x* и *y* точек, используемых для формирования спирали.

### Часть II. От формулы к геометрии

Хотя набор узлов из предыдущего этапа будет выполнять поставленные задачи, этот процесс довольно трудоемкий. Для повышения эффективности работы ознакомьтесь с разделом [DesignScript](/ru/8_coding_in_dynamo/8-1_code-blocks-and-design-script/2-design-script-syntax.md), в котором показано, как в одном узле разместить строку выражений Dynamo. На последующих этапах рассмотрим использование параметрического уравнения для построения спирали Фибоначчи.

**Point.ByCoordinates.** Соедините верхний узел умножения с входным параметром «*x*», а нижний — с входным параметром «*y*». На экране отобразится параметрическая спираль, проходящая через точки.

!

**Polycurve.ByPoints**. Соедините узел **Point.ByCoordinates** из предыдущего шага с входным параметром *points*. Параметр *connectLastToFirst* можно оставить без входных данных, поскольку мы не будем создавать замкнутую кривую. Таким образом, получаем спираль, которая проходит через каждую точку, заданную на предыдущем шаге.

!

Спираль Фибоначчи создана. Продолжим работу и выполним еще два упражнения, которые назовем «Наутилус» и «Подсолнух». Продемонстрируем два варианта использования спирали Фибоначчи на примере этих представителей естественных систем.

### Часть III. От спирали к наутилусу

**Circle.ByCenterPointRadius.** Узел окружности будет иметь те же входные данные, что и на предыдущем шаге. Значение радиуса по умолчанию равно *1.0*, поэтому окружности создаются сразу. Четко видно, каким образом точки отклоняются от начала координат.

!

**Number Sequence.** Это исходный массив элементов «*t*». Если соединить его со значением радиуса узла **Circle.ByCenterPointRadius**, центры окружностей будут по-прежнему отклоняться дальше от начального положения, но радиус окружностей будет увеличиваться, создавая необычный график спирали Фибоначчи.

3D-изображение этого объекта будет выглядеть замечательно.

!

### Часть IV. От наутилуса к подсолнуху

Массив. После создания раковины наутилуса перейдем к параметрическим сеткам. Используя основной угол вращения спирали Фибоначчи, создайте сетку Фибоначчи, а на ее основе — модель [расположения семян цветка подсолнуха](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.** Чтобы задать диапазон чисел, добавьте три узла Number в рабочую область в вертикальном порядке. В нисходящей последовательности назначьте значения *0.0,360.0* и *120.0* соответственно. Они будут определять вращение спирали. Обратите внимание на результаты вывода из узла **Number Range** после соединения с ним трех узлов Number.

Полученное изображение начинает напоминать водоворот. Скорректируйте некоторые параметры **Number Range** и посмотрите, как изменятся результаты.

Измените размер шага в узле **Number Range**, задав вместо значения *120.0* значение *36.0*. Обратите внимание, что при этом генерируется больше вращений, и, следовательно, создается более плотная сетка.

!

Измените размер шага в узле **Number Range**, задав вместо значения *36.0* значение *3.6*. Получится более плотная сетка, а у спирали будет отсутствовать направление. Итак, мы создали подсолнух.

!
