1.3.3. Математика, Выражения и Условия

Файлы упражнения, которые сопровождают этот раздел: Download

Знание как работать с числовыми данными - необходимый навык при изучении использования Grasshopper. Grasshopper содержит много компонентов для выполнения математических операций, определения условий и управления числовыми множествами.

В математике, числа организуются в множества и с двумя из них вы, возможно, знакомы:

Целые числа: […, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, …]
Числа с плавающей точкой: [8, …, -4.8, -3.6, -2.4, -1.2, 0.0, 1.234, e, 3.0, 4.0, …, 8]

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

1.3.3.1. ВКЛАДКА MATHS

Большинство компонентов, работающих с математическими операциями и функциями, располагаются во вкладке Math:

  1. Диапазоны используются для определения диапазонов значений (ранее назывались интервалами) между двумя числами. Компоненты в свитке Domain позволяют вам создавать или разрушать различные типы диапазонов.
  2. В математике, матрица - это массив чисел, организованных в ряды и колонки. Этот свиток содержит набор инструментов для создания и изменения матриц.
  3. Operators (Операторы) используются для выполнения математических операций, таких как Сложение, Вычитание, Умножение и т.д. Условные операторы позволяют вам определить, является ли числовое множество больше чем, меньше чем или равным другому числовому множеству.
  4. Polynomials (Многочлены) - одна из самых важных идей в алгебре и во всей математике и науке. Вы можете использовать компоненты из этого свитка для вычисления факториалов, логарифмов или для возведения числа в n-ую степень.
  5. Свиток Script содержит одно- и многозначные выражения, а также компоненты скриптов VB.NET и C#.
  6. Эти компоненты позволяют решить тригонометрические функции, такие как Синус, Косинус, Тангенс и др.
  7. Свиток Time включает набор компонентов, которые позволяют создавать примеры даты и времени.
  8. Свиток Utility - это 'мешок' с полезными компонентами, которые можно использовать в различных математических уравнениях. Зайдите сюда, если вы пытаетесь найти максимальные и минимальные значения двух списков чисел; или среднее в группе чисел.

1.3.3.2. ОПЕРАТОРЫ

Как было указано ранее, операторы - это наборы компонентов, которые используют алгебраические функции с двумя числовыми значениями входа, которые дают одно значение выхода.

Большую часть времени, вы будете использовать Математические операторы (Math) для совершения арифметических действий с числовыми множествами. Тем не менее, эти операторы могут также использоваться для различных типов данных, включая точки и векторы.

1.3.3.3. УСЛОВНЫЕ ОПЕРАТОРЫ

Почти каждый язык программирования имеет метод определения условных выражений. В большинстве случаев, программист создает части кода, чтобы задать простой вопрос "Что если". Что если область контура пола превышает программные требования? Или, что если изгиб моей крыши превышает реальные данные? Эти важные вопросы представляют высокий уровень абстрактного мышления. Компьютерные программы способны анализировать вопросы "что если" и действовать в зависимости от ответа на этот вопрос. Давайте посмотрим на очень простое условное выражение, которое программа может понять: Если объект - кривая, удалить его. Часть кода сначала смотрит на объект и определяет единичные булевые значения для решения кривая это или нет. Среднего здесь не дано. Булевое значения равно True (правда), если объект - это кривая, или False (Ложь), если объект не кривая. Вторая часть утверждения выполняет действие в зависимости от результата условного утверждения; в этом случае, если объект - это кривая, то решение - удалить ее. Это условное утверждение называется If (Если) утверждение. Существуют четыре условных оператора (располагаются во вкладке Math/ свиток Operators), которые определяют условие и выдают булевое значение.

Компонент Equality (равенство) берет два списка и сравнивает первый элемент списка А с первым элементом списка Б. Если два значения одинаковые, тогда создается булевое значение True, напротив, если два значения неравные, тогда создается булевое значение False. Компонент повторяет этот процесс со списками в соответствии с заданными алгоритмами совпадения (по умолчанию устанавливается самый длинный список). У этого компонента имеются два выхода. Первый возвращает список булевых значений, который показывает, какие из значений в списке были равны другим значениям. Второй выход возвращает список, который показывает, какие значения не были равны другим, либо список, который получается из первого выхода.

Компонент Similarity (сходство) оценивает два списка данных и тестирует сходство между двумя числами. На деле, это очень похоже на способ работы компонента Equality, который сравнивает два списка, за одним исключением: у него есть вход для процентов, который определяет степень списка А, которую список Б может исказить до того как неравенство будет определено. Компонент Similarity также имеет выход, который определяет абсолютное значение расстояния между двумя входными списками.

Компонент Larger Than берет два списка данных и определяет, больше ли первый элемент списка А, чем первый элемент списка Б. Два выхода позволяют вам определить, хотите ли вы определить два списка в соответствии с условием больше чем (>) или больше чем и равняется (>=).

Компонент Smaller Than выполняет противоположное действие компонента Larger Than. Компонент Smaller Than определяет, если список А меньше, чем список Б и возвращает список булевых значений. Схоже, два выхода позволяют определить вам, хотели бы вы определить каждый список в соответствии с условием меньше чем (<) или меньше чем и равно (<=).

1.3.3.4. ТРИГОНОМЕТРИЧЕСКИЕ КОМПОНЕНТЫ

Файлы упражнения, которые сопровождают этот раздел: Download

Мы уже показали, что мы можем использовать компонент Expression (или Evaluate) для определения условных выражений, а также для вычисления алгебраических уравнений. Тем не менее, существуют другие способы вычисления простых выражений, используя несколько встроенных Тригонометрических функций. Мы может использовать эти функций для определения периодического феномена как синусоидальная волновая форма, например, волны океана, звуковые волны и световые волны.

  1. Линия
    y(t) = 0
  2. Синусная кривая
    y(t) = sin(t)
  3. Винтовая спираль
    x(t) = cos(t)
    y(t) = sin(t)
    z(t) = b(t)
  4. Спираль
    x(t) = t*cos(t)
    y(t) = t*cos(t)

В этом примере, мы будем использовать Grasshopper для создания различных тригонометрических кривых, используя компоненты тригонометрических функций из раздела Math:

01. Чтобы начать новое определение, нажмите Ctrl+N в Grasshopper
02. Зайдите в Params/Geometry/Point – перетащите параметр Point на холст
03. Кликните правой клавишей мыши по параметру Point и кликните по Set One Point – выберите точку в видовом окне Rhino
04. Зайдите в Vector/Vector/Unit X – перетащите компонент Unit X на холст
05. Зайдите в Params/Input/Number Slider – перетащите слайдер Number Slider на холст
06. Дважды кликните по слайдеру Number Slider и установите следующее:
    Rounding: Integer
    Lower Limit: 10
    Upper Limit: 40
    Value: 20
07. Зайдите в Transform/Array/Linear Array – перетащите компонент Linear Array на холст
08. Соедините выход параметра Point с входом Geometry (G) компонента Linear Array
09. Соедините выход Unit Vector (V) компонента Unit X с входом Direction (D) компонента Linear Array
Вы должны увидеть линию из 20 точек вдоль оси Х в Rhino. Настройте слайдер, чтобы менять количество точек в массиве.
10. Соедините выход Number Slider с входом Count (N) компонента Linear Array
11. Зайдите в Curve/Spline/Interpolate – перетащите компонент Interpolate Curve на холст
12. Соедините выход Geometry (G) компонента Linear Array с входом Vertices (V) компонента Interpolate Curve

Мы только что создали линию, соединив массив точек с кривой. Давайте попытаемся использовать некоторые из Тригонометрических компонентов Grasshopper, чтобы изменить кривую:

13. Зайдите в Vector/Point/Deconstruct – перетащите компонент Deconstruct на холст
14. Зайдите в Vector/Point/Construct Point - перетащите компонент Construct Point на холст
15. Зайдите в Maths/Trig/Sine - перетащите компонент Sine на холст
16. Отсоедините связь от входа Vertices (V) компонента Interpolate Curve.
YВы можете разъединить связи, зажав Control и перетащив связь, либо кликнув правой клавишей на входе и выбрав Disconnect
17. Соедините выход Geometry (G) компонента Linear Array с входом Point (P) компонента Deconstruct
18. Соедините выход Point X (X) компонента Deconstruct с входом X coordinate (X) компонента Construct Point
19. Соедините второй связью выход Point X (X) компонента Deconstruct с входом Value (x) компонента Sine
20. Соедините выход Result (y) компонента Sine с входом Y coordinate (Y) компонента Construct Point
Мы переделали наши точки с такими же X значениями, изменив значения Y с синусоидальной кривой.
21. Соедините выход Point (Pt) компонента Construct Point с входом Vertices (V) компонента Interpolate

</li>

Сейчас вы должны видеть синусоидальную волновую кривую вдоль оси X в Rhino

22. Зайдите в Maths/Trig/Cosine – перетащите компонент Cosine на холст
23. Соедините третьей связью выход Point X (X) компонента Deconstruct с входом Value (x) компонента Cosine
24. Соедините выход Result (y) компонента Cosine с входом Z coordinate (Z) компонента Construct Point

</li>

Сейчас мы создали 3D винтовую спираль

25. Зайдите в Maths/Operators/Multiplication – перетащите два компонента Multiplication на холст
26. Соедините связями выход Point X (X) компонента Deconstruct с входом (A) каждого компонента Multiplication
27. Соедините выход Result (y) компонента Sine с входом (B) первого компонента Multiplication
28. Соедините выход Result (y) компонента Cosine с входом (B) второго компонента Multiplication
29. Отсоедините связь от входа Y Coordinate (Y) компонента Construct Point
30. Соедините выход Result (R) первого компонента Multiplication со входом X Coordinate (X) компонента Construct Point
31. Соедините выход Result (R) второго компонента Multiplication со входом Z Coordinate (Z) компонента Construct Point

Сейчас вы должны увидеть спиральную кривую

1.3.3.5. ВЫРАЖЕНИЯ

Файлы упражнения, которые сопровождают этот раздел: http://grasshopperprimer.com/appendix/A-2/1_gh-files.html

Компонент Expression (и его брат компонент Evaluate) представляет собой очень гибкий инструмент, который можно использовать для различных приложений. Мы можем использовать компонент Expression (или Evaluate), чтобы решать математические алгоритмы и выдавать числовые данные.

В следующем примере, мы рассмотрим математические спирали, которые можно наблюдать в природе, и как мы можем использовать несколько компонентов Functions для создания похожих паттернов в Grasshopper. Наши тригонометрические кривые мы возьмем за начальную точку.

01. Из предыдущего определения Grasshopper откройте тригонометрические кривые
02. Удалите компоненты Sine, Cosine, Multiplication и Interpolate
03. Зайдите в Params/Input/Number Slider – перетащите слайдер Number Slider на холст
04. Дважды кликните по слайдеру Number Slider и установите следующее:
    Rounding: Float
    Lower Limit: 0.000
    Upper Limit: 1.000
    Value: 1.000
05. Подключите слайдер Number Slider к входу Factor (F) компонента Unit X.
Этот слайдер позволит настроить расстояние между точками в массиве.
06. Зайдите в Maths/Script/Expression – перетащите два компонента Expression на холст
07. Дважды кликните на первом компоненте Expression чтобы открыть редактор Expression и изменить выражение: x*sin(x)
08. 8. Дважды кликните на втором компоненте Expressionчтобы открыть редактор Expression и изменить выражение: x*cos(x)

Дважды кликните на компоненте Expression, чтобы открыть редактор Grasshopper Expression

09. CСоедините две связи из выхода Point X (X) компонента Deconstruct с входом Variable x (x) каждого компонента Expression
10. Соедините выход Result (R) первого компонента Expression с входом X coordinate (X) компонента Construct Point
11. Соедините выход Result (R) второго компонента Expression с входом Y coordinate (Y) компонента Construct Point
Мы заменили тригонометрические функции и операторы умножения компонентами Expression для того, чтобы определение было более эффективным.
12. Зайдите в Mesh/Triangulation/Voronoi – перетащите компонент Voronoi на холст
13. Зайдите в Params/Input/Number Slider – перетащите слайдер Number Slider на холст
14. Дважды кликните по слайдеру Number Slider и установите следующее:
    Rounding: Integer
    Lower Limit: 1
    Upper Limit: 30
    Value: 30
15. Подключите слайдер Number Slider к входу Radius (R) в компонентеVoronoi
16. Соедините выход Point (Pt) компонента Construct Point с входом Points (P) компонента Voronoi

Вы можете создавать различные паттерны Вороного, меняя значение слайдеров Factor, Count и Radius. Ниже приведены три примера:

  1. Factor = 1.000, Radius = 15
  2. Factor = 0.400, Radius = 10
  3. Factor = 0.200, Radius = 7