Первый урок 1. Интерфейс
А. Главное меню
B. Элемент управления "Выбор файлов“ C. Панели компонентов
Данное меню подобно обычному для Windowsприложений меню, за исключением дополнительного элемента управления, расположенного справа (B). Он позволяет быстро переключаться между открытыми файлами, выбирая их из выпадающего списка. Нужно быть внимательным при использовании сочетаний клавиш. Так как нажатые клавиши обрабатываются активным окном, то им может оказаться окно самого Rhino, окно Gh. или любое другое окно в Rhino. Поскольку команда undo не доступна, то нужно быть внимательным с нажатием сочетаний клавиш Ctrl-X, Ctrl-S и Del. Как описано выше, данное выпадающее меню можно использовать для переключения между открытыми файлами Gh. Эта область содержит все категории доступных в Gh. компонентов. Каждый компонент относится к определенной категории (например: панель "Params" содержит примитивы различных видов, "Curves" содержит компоненты, относящиеся к работе с кривыми) и все категории доступны на отдельных панелях инструментов. Каждая панель содержит все компоненты, относящиеся к данной категории. Поскольку компонентов очень много,, то на панели отображаются р только N наиболее часто используемых элементов. Для доступа к остальным компонентам достаточно нажать на полоску с названием панели.
C. Панели компонентов
При этом появляется выпадающая панель со всеми компонентами данной категории. Для Д добавления б компонента на рабочий лист нужно нажать кнопку компонетна и затем щелкнуть в нужном месте листа, либо, выбрав элемент, перетащить его на лист, не отпуская кнопку мыши. Просто щелчек на элементе не добавляет его на лист! Вы должны его перетащить на лист:
Элементы также можно выбирать по имени, для этого достаточно дважды щелкнуть мышью в любом б месте листа. Появится всплывающее окно поиска компонента. Вводим название компонета и в списке видим те компоненты, название которых совпадает с введенными символами.
D. Строка заголовка окна
Строка заголовка окна редактора имеет отличия в поведении от других диалоговых окон Windows. Если окно находится не в максимальном или минимальном состоянии, то двойной щелчок на строке заголовка сворачивает или разворачивает окно. Это быстрый способ переключения между Gh. и Rhino, т.к. окно редактора сворачивается без перемещения вниз экрана. р З е Заметьте, е что о при р закрытии р о окна ре редактора, ор геометрия Gh. в окнах проекций не отображается, но в действительности файл Gh не закрывается и если запустить Gh. повторно, то оно вернется в прежнее состояние с теми же самыми открытыми файлами.
E. Панель инструментов листа
Панель инструментов листа предоставляет быстрый доступ к часто используемым инструментам листа. Все инструменты доступны также через меню, поэтому вы можете скрыть эту панель инструементов. (Она может быть повторно р открыта р через р меню "View"))
Панель инструментов листа содержит (слева на право): 1. Инструмент рисования: Он работает подобно инструменту карандаш в Photoshop или Paint. Можно настраивать ширину штриха, тип линии и цвет. Однако имеются трудности с изображением прямых линий и фигур. Для решения данной проблемы, нарисуйте р у любой эскиз на листе. Нажмите на нем правой р кнопкой. Выберите из контекстного меню "Load from Rhino" и укажите любую заранее нарисованную в Rhino фигуру. (Это может быть любая 2d фигура, например прямоугольник, окружность, звезда и т.д). После того как вы выбрали фигуру, нажмите Enter, и ваш эскиз будет заменен на выбранную фигуру. 2. Масштаб отображения 3. Показать все (выполняет подгонку содержимого листа под размер окна) и 4 кнопки фокусировки на соответсвующих углах вашего дефинишена (схемы). 4. Карта навигации открывает маленькое плавающее окно, схематично показывающее содержимое вашего листа и позволяет вам быстро перемещаться по листу без использования масштабирования и панорамирования. Данный инструмент похож на окно навигатора в Photoshop. 5. Список именованных видов (отображает меню, где можно сохранять и вызывать сохраненные виды) 6 Кнопки 6. К выравнивания компонентов 7. Разрешить просмотр выбранных компонентов (отображает геомерию создаваемую компонентом) 8. Запретить просмотр выбранных компонентов
E. Панель инструментов листа
9. Перестроить дефинишен (выполняет полный пересчет всех построений) 10. Разрешить / запретить решатель (дефинишен не будет расчитываться) 11. Инструмент запекания (превращает результаты построения всех выбранных компонентов в реальные геометрические объекты Rhino) 12. Настройки предпросмотра геометрии (По умолчанию геометрия в Gh. отображается. Однако для повышения скорости прорисовки некоторых сцен, содержащих кривые или триммленые поверхности можно отключить предпросмотр или выбрать каркасный режим просмотра.) 14. Кнопка "Hide". Эта кнопка прячет панель инструментов. Вы можете отобразить ее обратно через меню View.
F. Рабочий лист
На рабочем листе вы создается и редактируете ваш дефинишен. Лист содержит все компоненты, входящие в дефинишен и некоторые виджеты (G). Объекты на листе кодируются цветом, для обеспечения обратной связи об их состоянии:
A) Параметр. Параметр имеющий предупреждение, отображается оранжевым прямоугольником. Большинство параметров становятся оранжевыми, сразу же как только вы помещаете их на лист т.к. для них не заданы входные объекты или значения, что и вызывает предупреждение. B) Параметр. Параметр, который не содержит предупреждений или ошибок. C)) Компонент. Компонент это всегда д более сложный объект (чем параметр), поскольку он содержит входные и выходные параметры. Этот конкретный элемент имеет по крайней мере одно предупреждение, связанное с ним. Вы можете получить более подробную информацию о предупреждениях и ошибках через контекстное меню объекта.
F. Рабочий лист
D) Компонент. Компонент, не имеющий предупреждений и ошибок. E) Component. Компонент, содержащий минимум 1 ошибку. Ошибка может быть заключена как в самом компоненте, так и во входных параметрах. Более подробно о структурах компонентов в следующих главах. Все выбранные объекты отображаются зеленым цветом (на рис. не показано)
G. Виджеты пользовательског о интерфейса ф й (UI)
H. Строка статуса
В настоящее время доступен тольк один виджет - Компас, отображаемый в правом нижнем углу листа. Компас представляет собой инструмент навигации на листе. Он графически показывает где расположено текущее окно просмотра по отношению ко всему дефинишену. Виджеты включаются/выключаются в меню View. Строка статуса обеспечивает обратную связь и показывает важные события, происходящие в Gh. Здесь отображается информация о том имеются или нет в дефинишене ошибки или предупреждения. Панель удаленного управления: Поскольку окно Gh. довольно большое, вы можете захотеть чтобы оно не отображалось постоянно на экране. В конечно можете свернуть его или уменьшить в Вы размерах, но тогда вы не сможете изменять значения параметров. Для обеспечения минимального интерфейса с текущим дефинишеном служит окно удаленного управления. Это стыкующееся окно содержит все слайдеры и булевы переключатели (и возможно другие значения в последующих релизах программы):
Панель удаленного управления также обеспечивает переключение режимов предпросмора, и файлов дефинишенов. Включить/выключить панель можно через менюView главного окна, или через команду Rhino _GrasshopperPanel.
Обратная связь с окном просмотра:
A) Голубым цветом отображается геометрия, выбранная вами с помощью мыши. B) Зеленым цветомотображается геометрия выбранных компонентов. C) Красным цветом отображается геометрия невыбранных компонентов. D)) Точки отображаются р в виде крестиков, р , чтобы их удобнее было отличать от точек Rhino.
2. Объекты Grasshopper
Формулировка названий в Grasshopper может обозначать различные виды объектов, но в начале нам понадобятся только два из них: - Параметры - Компоненты Параметры содержат данные, определяющие объект. Компоненты хранят действия, определяющие операции производимые с объектами.
А. Параметр содержащий данные. Поскольку с левой стороны нет «проволоки» с вводимыми данными, т.е. он не наследует данные из других источников. Параметры, которые не содержат ошибки или предупреждения выглядят как тонкие черные горизонтальные блоки с текстом.
В. Параметр не содержащий никаких данных. Все параметры которые добавляются в рабочую область в начале имеют оранжевый цвет – это указывает на то что они не содержат каких-либо данных. После того как параметру присваиваются данные он окрашивается в черный цвет. цвет С. Все выделенные компоненты имеют зеленую окраску. D. Правильно работающие компоненты. Е. Компоненты содержащие предупреждение. Поскольку компонент может содержать множество вводимых и выводимых данных, очень трубно бывает определить где произошел сбой в алгоритме. Стоит отметить, что предупреждение не обязательно должно быть исправлено. Оно может быть полностью подтверждено. F. Компоненты содержащие ошибки. Похоже на компонент содержащий предупреждение, но не допустим для дальнейшей корректной работы алгоритма. Компонент может содержать в предупреждение и ошибку одновременно, но ошибка имеет приоритет над предупреждением (объект будет красным). G. Соединения. д Всегда д присутствуют р у у между ду вводимыми д и выводимыми параметрами. Нет ограничения на количество связей параметров. Некорректные соединения приводят к окрашиванию параметра в красный цвет, либо автоматически обрываются Gh.
Д работы б компонентов требуются б вводимые Составные части Для параметры, которые располагаются вдоль левой части. компонентов Выводимые данные расположены справа.
А. Три вводимых параметра компонента Division(деление). По умолчанию параметры имеют очень короткое р название,, но могут у быть переименованы р пользователем. В. Пространство компонента Division(деление). С. Три выводимых параметра компонента Division(деление).
При наведении указателя мыши на отдельные части Component Object, вы увидите различные подсказки, которые указывают на конкретный тип вводимых и выводимых данных.
Использование контекстного меню Popup.
Все объекты на рабочем поле имеют свое собственное контекстное меню, которые содержит большинство функций. Компоненты немного сложнее, поскольку они также содержат (в виде каскада), все меню суб-объектов, которые они содержат. Например, если компонент станет оранжевым это означает, что он или какого-либо параметр связанный с этим компонентом, генерирует предупреждение. Если вы хотите узнать, что пошло не так, вы должны использовать контекстное меню компонента.
На изображении вы видите главное меню компонента, с каскадными меню "R" вводимого параметра. Меню обычно начинается с редактируемого текстового поля, в котором располагается название объекта. Вы можете изменить название на что-то более описательное для данного компонента,
но умолчанию все имена очень короткие, чтобы свести к минимуму нерациональное использование области экрана. Второй пункт в меню (просмотр флага) показывает, будет ли видна в окнах Rhino геометрия произведенная/определеная этом объектом. Отключение Preview для компонентов , которые не содержат важной информации позволит ускорить работу. Если Preview для параметра или компонента отключено, он будет окрашен слабой белой заливкой. Не все параметры / компоненты могут быть изображены в рабочих окнах (например числа) и в этих случаях пункт Preview, как правило, отсутствуют. Контекстное меню для "R" вводимого параметра содержит оранжевый значок предупреждения, которая в свою очередь, содержит список (только 1 предупреждение в этом случае) на все предупреждениякоторые были сгенерированы по этому параметру.
3. Управление постоянными данными
Такого типа параметры используются только для хранения информации, большинство данных можно хранить двумя различными способами: изменяемые и постоянные. Изменяемые данные «достаются по наследству» от исходных параметров и будут уничтожены, как только начинается новая операция. Постоянные данные специально устанавливаются пользователем. Когда параметр подключен к источнику вводимых данных, постоянные данных не учитывается, но и не уничтожаются. (Исключением здесь являются выводимые данные, которые не сохранили постоянные записи ни определить набор источников. Выводимые параметры полностью под контролем компонент, который владеет ими.) Постоянные данные доступны через меню, и в зависимости от типа параметра имеют разные менеджеры. Векторные р параметры, р р , например р р позволяют устанавливать как одно так и несколько векторов через меню. Но, давайте вернемся на несколько шагов назад и посмотрим, как ведут себя параметры по умолчанию. Выбросим в рабочее поле vector parametr:
Параметр имеет оранжевый цвет указывая на то, что он генерирует предупреждение. Ничего серьезного, предупреждение - это просто сообщение которое информирует, что параметр пустой (в нем нет постоянных записей и не получил изменяемых данных) и таким образом не влияет на результат истории решения. Контекстное меню для параметра предлагает 2 способа установление постоянных данных: единичное и составное:
Нажав на любой из этих пунктов меню «кузнечика» окно исчезнет и вам будет предложено выбрать вектор в одном из видовых окон Rhino.
После того как вы выбрали нужные вам векторы, они стали частью параметра, р р , т.е. его постоянными данными. Параметр больше ну пуст и его цвет с оранжевого меняется на черный:
Теперь параметр может использовать как «первоисточник» для многих объектов с одинаковыми векторами.
4. Наследование
изменяемых данных
Данные хранящиеся в параметрах бывают постоянные и изменяемые, используемые другими компонентами. Если данные не хранятся в постоянной записи набора параметров, они могут быть унаследованы из другого источника. Каждый параметр (кроме тех, что выводят информацию) определяется информацией полученной из вне в большинстве своем они не очень точны. вне, точны Вы можете подключить двойной параметр (который просто будет определять, что это число десятичное) в источник целочисленных значений и он будет следить за изменениями. Плагин определяет многие схемы изменений, но если процедура не определена, параметр будет генерировать ошибку при изменении. Например, если вы используете «поверхность», когда необходима точка, параметр «точка» будет генерировать сообщение об ошибке (которое доступно через меню параметра в вопросе) и становится красным. Если параметр относится к «компоненту», такое положение «красноты» будут распространяться вверх по иерархии, а компонент тоже станет красный, р , хотя оно не может содержать д р ошибки сам по себе.
На данном этапе, все объекты не связаны, и мы должны начать их подключение. Не имеет значения в каком порядке мы это сделаем, но давайте это сделаем слева направо. Если начать перетаскивать маленький полукруг параметра (что часто называется "захват") захват ) соединительный провод будет приложен к мыши.
После этого, мышь (пока вы удерживаете левую кнопку нажатой) «парит» над потенциальной мишенью «параметром», «параметром» проволока присоединится и станет сплошной. Это не постоянное соединение пока вы не отпустите кнопку мыши:
Вы можете сделать туже процедуру с «Y» параметром PtGrid, а также с «А» и «В» параметрами компонента Line: щелкнул+перетащил+отпустил…)
Обратите внимание на то, что мы можем сделать связь в обоих направлениях. Но будьте осторожны, по умолчанию новое соединение удалит существующее подключение. Так как мы предполагали, что вы будете чаще использовать только одно
соединение, вы должны сделать что-то особенное, чтобы определить несколько источников. Если вы держите Shift при перетаскивании соединительного провода, курсор изменится для указания этого поведения:
Если курсор «Добавить» становится активным, когда вы отпустите кнопку мыши над источником «параметр», то этот параметр будет добавлен в список источников. Если вы укажите источник «параметр», «параметр» который уже определен в качестве источника, ничего не произойдет. Вы не можете наследовать из того же источника более чем один раз. К тому же, если вы удерживаете Ctrl станет видим курсор «REM», и целевого источника будут удалены из исходного списка. Если цель не выбрана, ничего не произойдет.
Вы также можете отсоединить (но не присоединить) источник через меню параметра:
Кузнечик также имеет возможность беспроводной передачи информации на основе использования приемника, который можно найти в специальной подкатегории вкладки Params. Вы можете сделать подключения к ресиверу, так же, как с любым другим компонентом. Однако, как только вы отпустите левую кнопку мыши, соединение у проводов автоматически исчезает. Это происходит потому, что настройка приемника по умолчанию использует только пунктирную связь проводов при выборе приемника. Вы можете щелкнуть правой кнопкой мыши на приемник и установить соединение проводов, чтобы показать только тогда, когда приемник «выбран", либо "всегда" или никогда не показывать соединения проводов. проводов Вы можете "никогда" подключить «выход» приемник как и многие другие компоненты по мере необходимости.
Здесь вы видите соединительную пунктирную проволоку, потому что компонент ресивер выделен.
Номер 1 перед входом компонента «приемник» показывает, что есть только одна связь, учитываются в ее входе. Однако, пока компонент ресивер не выделен, соединение проводов больше не появляется (но информация по-прежнему передается).
Сопоставление данных
5. Соответствия потока данных
Сопоставления данных - проблема, не имеющая чистого решения. Она возникает, когда компонент имеет доступ к разного размера выводимым ресурсам. Представьте себе компонент, который создает отрезки между точками. Она будет иметь два входных параметра, которые оба содержат координаты точек (поток А и поток B). Не имеет значения, где эти параметры собирать свои данные, компонент не может "видеть" в пределах самого себя и выходных параметров.
Как вы можете видеть, существуют много различных способов, с помощью которых можно нарисовать линии между этими множествами точек. Grasshopper в настоящее время р содержит д р три р соответствующих у щ алгоритма, р , но также многие другие возможности. Простейший способ подключения входов один к одному, пока один из потоков проходит «сухой». Это называется «кратчайшие список" алгоритма:
Алгоритм «длинного списка» сохраняет соединения между входными данными до тех пор пока все каналы не иссякнут. Этот компонент стоит в настройках по умолчанию.
И последний алгоритм, «перекрестная ссылка» - метод использующий у все возможные комбинации. Это потенциально опасно, так как количество выводимых данных может быть огромным. Проблема становится еще более сложной чем больше входных параметров принимают участие и когда изменяемые наследуемые данные данные начинают множественно увеличиваться, но логика остается той же. Представьте, у нас есть точки компонент, которых наследуют X, Y и Z значения из удаленных параметров, которые содержат следующие данные: Координаты х: (0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0) Координаты Y: (0.0, 1.0, 2.0, 3.0, 4.0) Координата Z: (0 (0,0, 0 1,0) 1 0)
Если объединить эти данные в «короткий список», мы получаем только две точки с «Z координатой», которые содержат только два значения. Так как это кратчайший список определяет степень решения:
"Самый "С й длинный й список"" алгоритм создаст десять очков, переработка самых высоких возможных значений из Y и Z направлениям:
«перекрестные связи" соединят все значения X со всеми значениями Y и Z, в результате чего получаем 10 × 5 × 2 = 100 точек:
Каждый компонент может быть настроен согласно одному из этих правил (настройка доступна в меню компонента вызываемой правой кнопкой мыши на иконке). Обратите внимание на одно большое исключение из этого правила. Некоторые компоненты рассчитывают получить список данные в одном или нескольких из своих полей ввода. Компонент полилиния, например, создает
кривую полилинию через массив вводимых точек. Дополнительные точки в водимых параметрах приведут к более длинной полилинии, а не к большему колличеству полилиний. Входные параметры, которые предположительно принесут больший результат чем одно значение называется список параметров и они игнорируются в течение процесса сопоставления данных.
Второй урок. 6. Виды вычислительные компоненты.
Вычислительные компоненты различных математических состоят из:
используются операций
для и
А)) Констант. Постоянные значения, такие как Пи, "золотое сечение", и т.д... C) Интервалами. Используется для разделения числовых крайностей (или областей) на интервалы частей. Существует у у много компонентов во вкладке Intervals, которые позволят вам создавать или разделять на различные типы интервалов. D) Операторы. Используется в математических операциях, таких как добавление, вычитание, умножение и т.д... Е) Полиномов. Используется для повышения числовые значения некоторого множества. В математике, многочлены или полиномы от одной переменной функции вида*
,где ci фиксированные коэффициенты, а x — переменная. Многочлены составляют один из важнейших классов элементарных функций. F) тригонометрические. Тригонометрические значения, такие как синус, косинус, касательные и т.д... G) Утилиты – анализ (оценка полезности). Использоваться для оценки двух или более численных значений.
Операторы
Как уже упоминалось ранее, операторы представляют собой набор компонентов, которые используют алгебраические функций с двумя вводимыми числовыми значениями, а ,вр результате у а которых о ор получаем о у а одно од о выходящее значение. Для дальнейшего понимания «операторов», мы введем простое математическое определение, чтобы разбираться в различных типах компонентов «операторов».
Создадим определения подобранные случайным образом: • Params/Special/Numeric Slider - перетащим ползунок числовых значений на холсте. • Двойной щелчок по слайдеру вызовет настройки: - нижний предел: р д 0,0 , - верхний предел: 100,0 - значение: 50,0 (Примечание: эта величина произвольная и может быть изменена на любое значение в границах верхнего и нижнего пределов) • Выберите тип слайдера и Ctrl + C (копировать) и Ctrl + V (вставить), чтобы создать дубликат слайдер • Params/Primitive/Integer - перетащить два целочисленных компонентов на холст • Подключить 1 ползунок на первый компонент Integer • Подключить слайдер от 2 ко второму компоненту Integer Слайдер по умолчанию имеет значение с плавающей точкой (в результате чего мы имеем десятичные числовые значения) Подсоединив слайдер к компоненту Integer, значения). Integer мы можем округлить значение с плавающей точкой, или любое целое число. Когда мы подключим Post-It панель (Params/Special/Panel) к выводимому значению каждого компонента Integer, мы увидим преобразования в режиме реального времени. Переместите ползунок слева и справа и значения плавающей точки будут округлены в целое число. Конечно, мы могли бы б упростить этот шаг просто установив тип слайдера до целых чисел. • Scalar/Operators/Add – перетащить-добавить компонент на холст • Подключение первого Integer компонента к Add A • Подключение второго р Integer g компонента к Add B • Params/Special/Panel – перетащить панель Post-it на холст • Подключаем Add-R к выходу Post-it, и видим суммирование значений двух чисел на Post-it панели.
• Перетаскивание остальные скалярные операторы на поле: - Вычитание - Умножение - Деление - Модуль - Степень • Подключим первого компонента Integer к каждому из Operator's-А входных значений. • Подключим второго компонента Integer к каждому из Operator's-B входных значений. • Перетащим еще пять Post-it панелей й на холсте и подключим по одной панели к выходящим значениям каждого оператора. Определению завершено и теперь, когда вы меняете каждое из значений слайдера можете увидеть результат действия каждого оператора в Post-it области панели.
Условные операторы
Вы, наверное, заметили, что существует несколько компонентов, в подкатегории Operator вкладки Scalar, которые мы не рассмотрели в последнем разделе. Существуют 4 компонента (новые версии 0.6.0007), которые действуют несколько иначе, чем математические операторы, для того что бы продемонстрировать это, сравним два списка данных вместо выполнения алгебраических выражений. Четыре компонента Equality, Similarity, Larger Than, and Smaller Than (равенство, сходство, превышение и меньше чем) объясняются более подробно ниже.
А) Equality(равенство) имеет два компонента списка и сопоставляет первый пункт списка A с первым пунктом cписка В. Если эти два значения совпадают, то True (верно) создается булево значение, и наоборот, если два значения не равны, то False создается логическое значение. Компоненты цикла в списках в соответствуют заданным данными алгоритма сопоставления (по умолчанию установленных в Longest List). Есть два выхода для этого компонент. Первый возвращает список булевых значений показывая, какие значения в списке были равны друг другу. Второй выход возвращает список показывая, какие значения не равны друг другу - или список обратный первому. Б) Similarity (сходство) оценивает два компонента списка данных и проверяет сходство между двумя числами. Это почти идентично тому, как компонент Equality сравнивает два cписка, за одним исключением ... тем, что имеет процент ввода, который определяет отношение списка А и списка В,, список имеет право р отступать у перед р д предполагается неравенство. Similarity компонент также имеет выводимые параметры, которые определяют абсолютное значение расстояния между двумя входными списки. C) Larger than (больше чем) компонент берет два списки данных и сопоставляет первый пункт списка А и первый пункт из списка B. Двумя выходами позволяет вам дать оценку двух списков в соответствии с критериями "больше" (>) или больше и равно (> =) состоянии. D) Smaller than (меньше чем) компонент выполняет противоположное действие компоненту Larger Than. Компонент Smaller than определяет, определяет будет ли список А меньше списка В и возвращает список булевых значений. Кроме того, два выхода позволяют вам оценить каждый список в соответствии со следующими критериями меньше чем (<) или меньше или равно (<=). Диапазоны, серии и интервалы – компоненты, создающие
Диапазоны, серии множества значений Диапазоны й между двумя числовыми пределами, и интервалы однако каждый компонент работает по-разному.
Range
Компонент Range (диапазон) создает список значений равноудаленных друг от друга между нижним и верхним пределами. В приведенном выше примере, два числовых ползунка подключены к входу значений компонента Range. Первый слайдер определяет числовой домен для диапазона значений. В данном примере домен был определен от нуля до одного, так как регулятор установлен в положение 1. Второй ползунок определяет ряд шагов по разделению домена, который в данном случае был установлен на 10. Таким образом, на выходе получаем список из 11 номеров равноудаленных на 1. (Примечание: второй слайдер, установлен на 10, что определяет количество делений между 0 и 1, который в конечном счете создает 11 чисел, а не 10)
Series
Компонент Series создает д набор р д дискретных р чисел,, базирующихся на начальное значение, размере шага и количестве значений в серии. Пример серии демонстрирует три числовых слайдера связанных с компонентом Series. Первый ползунок, подключенный к Series-S на входе, определяет отправную точку для ряда чисел. Второй слайдер, установленный на 10, определяет значение шага для серии. серии Итак, Итак в начале значение было установлено на 1 и размер шага был установлен на 10, следующее значение в серии будет 11. И наконец, третий ползунок определяет количество значений в серии. Поскольку это значение было также установлено на 10, финальные значения определяются серией из 10 номеров, начиная с 1 и шагом 10.
Компонент Interval создает целый ряд всевозможных чисел между нижним и верхним номерами. Компонент Interval похож на числовой домен, который мы определили для компонент Range. Основное различие заключается в том, что компонент Range создает диапазон по умолчанию числового домена между 0 и введеным значением. В компоненте Interval, низшее и высшее значения определяют вводимые параметры А и В. В приведенном выше примере, мы определили диапазон всех возможных значений между 10 и 20, установленных двумя числовыми ползунками. Выходное значение для компонента Interval показывает значения от 10,0 до 20,0 которые отражают наш новый числовой домен. Если теперь соединить Interval-I выхода с Range-D, мы можем создать ряд чисел в интервале значений. Как и в предыдущем примере с компонентом Range, мы устанавливаем число шагов 10, и видим 11 значений равномерно распределенным по интервалу от нижнего значения 10,0 до верхнего 20,0. (Примечание: Есть несколько способов, способов чтобы определить интервал, интервал и вы можете увидеть некоторые другие методы, перечисленные во вкладке Scalar/Interval. Мы лишь определили простой компонент Interval, о некоторых других интервальных методов будет рассказано в следующих главах)
Рандомные д (случайные) данные
Итак, а , к примеру, р ру, мы р решили сделать д а хаотически ао распределенное множество точек для какой-нибудь дальнейшего работы. Все, что нам для этого нужно набор случайных чисел Random (расположенный во вкладке Logic), а также будем использовать компонент Point XYZ и компонент Jitter (дрож).
Компонент Random производит 10 случайных чисел, количество которых контролируются Numeric slider, а затем этот список перемешиваются компонентом Jitter (Logic/Sets/Jitter) по Y координате в первом пункте, и по Z координат во втором, иначе получилась бы просто структура внутри вашей сетки. Все точки распределены в пространстве между 0 и 1 для каждого направления. направления Чтобы изменить ареал точек мы должны изменить численный домен компонента Random. Это можно сделать вручную, установив «область случайных чисел» в окне Rhino или при помощи числового слайдера.
Настройка домена значений компонента Random, Interval (Scalar/Interval/Interval), чтобы увеличить ареал точек. Подключим Numeric slider к входу-R компонента Random, он просто регулирует верхний интервал области (с нижним интервалом равным 0).
Последовательность А что если расположенных Фибоначчи
сделать сетку точек равномерно с увеличением значения? Давайте посмотрим на доступные компоненты. Нам необходима серия номеров, которые быстро увеличивают свое значение, для чего нам понадобится компонент Fibonacci (Logic/Sets/Fibonacci). Числовой ряд Фибоначчи – последовательность с двумя первыми определенные значениями (например, 0 и 1), а следующий номер представляет собой сумму двух предыдущих чисел. N (0) = 0, N (1) = 1, N (2) = 1, N (3) = 2, N (4) = 3, N (5) = 5, ..., N (I) = N (I-2) + N (I-1) Вот некоторые из номеров этой серии: 0, 1, 1, 2, 3, 5, 8, 13 21, 13, 21 34, 34 55, 55 89, 89 ... Как можно заметить, числовая последовательность быстро растет. Здесь мы используем серию Fibonacci (Logic/ Component /Fibonacci) для получения постепенно увеличивающихся последовательности и соединяем ее с компонентом Point XYZ (cross reference).
Функции и булевы операции
Почти каждый язык программирования имеет метод для оценки условных положений. В большинстве случаев программист создает кусок кода, чтобы задать простой Вопрос "что если?" Что делать, если 9 / 11 террористических нападений никогда не случалось? Что делать, если цена на газ $ 10/gallon? Это важные вопросы, которые представляют собой более высокий уровень абстрактного мышления. Компьютерные программы также имеют возможность анализировать вопрос "что если?" и принимать меры в зависимости от ответа на этот вопрос. Давайте взглянем на очень простые условные заявления о том, что программа может интерпретировать: Если объект представляет собой кривую, удалите его. В начале часть кода «смотрит» на объект и определяет одно из значение для булевых операций, представляет ли объект собой кривую. Среднего значения не предусмотрено. Булево значение True (верно), если объект представляет собой кривую, или False (ложно), если объект не является кривой. Вторая часть заявления выполняет действия в зависимости от результата условного заявление, в данном случае, если объект р д собой кривую, р у , то он будет уд удален. Это уд представляет условный оператор называется If / Else. Если объект соответствует определенным критериям, делать что-то, если нет, то сделать что-то другое. Кузнечик имеет такую же способность к анализу условных операторов с помощью компонентов Function F(x).
В приведенном выше примере, мы подключили числовой слайдер к X-входу одной переменной составляющей функцию (Logic/Script/F1). Кроме того, условный оператор был подключен к F-входу функции, определяющий вопрос: "X больше 5?«, Если числовой слайдер установлен выше 5, то r-выход для функции показывает логическое значение True. True Если числовой слайдер ниже 5, то r-вывод изменится на значение False. После того как мы определили булево значение функции, можно вставить True/False шаблон информации в компонент Dispatch (Logic/List/Dispatch) для выполнения определенных действий. Компонент Dispatch К Di t h работ б путем обработки б б перечня информации (в нашем примере мы подключаем числовой слайдер информации к входу Dispatch-L) и фильтрации данных основанных на результате булевой операции одной переменной функцией. Если модель показывает значение True, список информации будут передан в Dispatch-А выход. Если модель показывает значение False, список информацию передается в Dispatch-B вывода. Например, мы решили создать круг ТОЛЬКО если значение больше 5. Мы соединяем компонент Circle (Curve/Primitive/Circle) c выходом Dispatch-А, так что круг с указанным радиусом на числовом слайдере будет создана только тогда, когда булево значение, передаст в компонент о о е сообщение сообще е True. ue Поскольку ос о у ни од один компонент о о е не был подсоединен к Dispatch-B выходу, то логическое значение False не к чему не приведет, и круг не будет создан.
В дальнейшем мы сможем определить эту разницу, присоединив N-Sided Polygon (Curve/Primitive/Polygon) r выходу Dispatch-B, убедившись, что подключение осуществлено к входу Polygon-R, для задания радиуса полигона. Теперь, если числовой слайдер имеет значение ниже 5, то пятисторонний многоугольник с радиусом который определяется значением слайдера будет создано в начальной точке. Если мы возьмем слайдер, значение которого превышает 5, то будет создан круг. По этому методу, можно начинать создавать сколько угодно If / Else положений по мере необходимости добавлять информацию на всем протяжении нашего определения.
Функции и номерные данные
Компонент Function (функция) является очень разносторонними, так как они могут быть использованы в различных вариантах приложений. Мы уже обсуждали, как можно использовать компонент Function для оценки условных положений и выполнения булевых операций для выводимых данных. Тем не менее, мы также можем использовать компоненты Function для решения сложных математических алгоритмов и отображения числовых данных в выводимых значениях.
Создание определения с нуля: • Logic/Sets/Range – выберем в перетащим компонент Range на рабочее поле • Params/Special/Slider - выберем в перетащим числовой слайдер на рабочее поле • щелкнув правой кнопкой мыши по слайдеру введем следующие данные: o Name(название): Crv Length o Slider Type(тип слайдера): Floating Point (по умолчанию) o Lower Limit(нижний предел): 0.1 o Upper Limit(верхний предел): 10.0 o Value(значение): 2.5 • Далее щелкнув правой кнопкой мыши по второму слайдеру введем следующие данные : o Name: Num Pts on Crv o Slider Type: Integers o Lower Limit: 1.0 o Upper Limit: 100.0 o Value: 100.0 • Соединим Crv Length слайдер с входными данными Range-D • Соединим Num Pts on Crv с входными данными Range-N
Нами был создан диапазон данных содержащий 101 значение, который расположен в пределах от 0 до 2,5, который может быть подключен к компоненту Function. • Logic/Script/F1 - выберем в перетащим на рабочее поле компонент Function •щ щелчком правой р кнопки мыши по F-input p компонента Function откроем Expression Editor(редактор значений). • в окне Expression Editor введем следующее значение: o x*sin(5*x) Если введенный алгоритм не содержит ошибок, вы увидите сообщение "No syntax errors detected in expression« (т.е. выражение не содержит ошибок). o щелчком ОК подтверждаем алгоритм. алгоритм
• выделяем компонент Function и нажимаем Ctrl+C (скопировать), Ctrl+V (вставить) для создания дубликата Function • щелчком правой кнопки мыши по F-input компонента второй Function откроем Expression Editor(редактор значений). • в Expression Editor (редактор значений) вводим следующее выражение: o x*cos(5*x) Примечание: единственное отличие от предыдущей это то что функция cos. o жмем ОК для подтверждения • Соединяем выход Range-R со входом x обеих компонентом Function Итак мы получили 101 значение созданное компонентом Range в компоненте Function, который решает математические алгоритмы и выводит список новых числовых данных. При наведении указателя мыши на R выходе каждой функции, мы видим результат каждого уравнения.
• Vector/Point/Point XYZ – выберем и перетащим компонент Point XYZ на рабочее поле • соединим первый выводимый параметр Function-r с входным значением X компонента Point • соединим д второй р выводимый д параметр р р Function-r с входным значением Y компонента Point • соединим выводимый параметр Range-R с входным значением Z компонента Point Теперь, если вы посмотрите в окно Rhino, вы увидите множество точек, образующих спираль. Вы можете менять значения двух числовых слайдеров, чтобы изменить количество точек по спирали или длину спирали. спирали • Curve/Spline/Curve – выберем и перетащим компонент Curve на рабочий стол • соединим выводимый параметр Point-Pt с входным параметром Curve-V Мы создали одну кривую, которая проходит через все точки спирали. спирали Щелкнув правой кнопкой мыши на вкладке Curve-D в наборе кривых степени; кривая 1 степени будет создавать прямые отрезки между каждой точкой и гарантирует, что кривая фактически проходит через каждую точку. Кривая 3 степени создаст гладкую кривую Безье, где точки спирали будут выступать в качестве контрольных точек для кривой, однако, линия не будет фактически проходит через каждую точку.
Тригонометрические Как уже было показано, мы можем использовать компонент Function для оценки сложных формул, для кривые
создания спиралей и других математических кривых, однако Кузнечик также имеет набор тригонометрических компонентов, встроенных в семью скалярных компонент. Тригонометрические функции, функции такие как синус(Sin), синус(Sin) косинус(Cos) и тангенс(Tan) являются важными инструментами математиков, ученых и инженеров, поскольку они определяют отношение между двумя сторонах прямоугольного треугольника, содержащий конкретную угол, называемый тета(Theta). Эти функции важны в векторном анализе, который мы рассмотрим в последующих главах. главах Тем не менее, менее мы можем также использовать эти функции, чтобы определить периодические явления, как синусоидальные волновые функции часто встречающиеся в природе в виде морской волны, звуковые волны, а световые волны. В 1822, Жозеф Фурье, французский математик, обнаружил, что синусоидальная волна может быть использована в качестве простых строительных блоков для создания и описания практически любых периодических колебания. Этот процесс называется Фурье-анализ. В следующем примере мы создадим синусоидальную форму волны, где число точек на кривой, длина волны, частота и амплитуда могут контролироваться путем набора числовых слайдеров. д р
Создание определения с нуля: p – выберем р и перетащим р на р рабочий стол 3 • Params/Special/Slider числовых слайдера • выберем первый слайдер и зададим следующие параметры: o Name: Num Pts on Curve (название – количество тчк на кривой) o Slider Type: Integers (целочисленные значения) o Lower Limit: 1 (нижний предел) o Upper Limit: 50 (верхний предел) o Value: 40 (значение) • выберем второй слайдер и зададим следующие параметры : o Name: Wave Length (длина волны) o Slider Type: Integers o Lower Limit: 0 o Upper Limit: 30 o Value: 10
• выберем третий слайдер и зададим следующие параметры : o Name: Frequency (название - частота) o Slider Type: Integers (целочисленные значения) o Lower Limit: 0 (нижний предел) o Upper Limit: 30 (верхний предел) o Value: 12 (значение) • Logic/Sets/Range – выберем и перетащим 2 компонента Range на рабочий стол • соединим Wave Length (длина волны) слайдер с первым RangeD входом • соединим Frequency (частота) слайдер со вторым Range-D входом • соединим Num Pts on Curve (количество точек на кривой) слайдер с обеими Range-N входами.
Сейчас мы создали два списка данных (Range); первый – диапазон чисел от 0 до 10 , а второй список - числа от 0 до 12. • Scalar/Trigonometry/Sin – выберем и перетащи компонент Sin на рабочий стол • соединим второй Range-R выход со входом x компонента Sin • Vector/Point/Point XYZ - выберем и перетащи компонент Point XYZ на рабочий стол • соединим первый Range-R выход с X входом компонента Point XYZ • соединим выход y компонента Sin с Y входом компонента Point XYZ Если вы посмотрите в окно Rhino, вы увидите ряд точек в виде синусоиды. С того момента как первые данные компонента Range (диапазон), будут передаваться во вход X компонента Point, без б подсоединения к компоненту тригонометрической функции, значение x точек будет оставаться постоянным и равномерно распределенным. Однако, мы имеем компонент Sin (синус), который подает данные на вход Y компонента Point, поэтому видим изменения в значениях точек; которые в конечном итоге р у волновой структуру. ру уру Теперь р можно изменяя образуют значения числовых ползунков изменять форму волновой структуры. • Curve/Spline/Interpolate – выберем и перетащим на рабочий стол компонент Interpolated Curve
• соединим выход Point-Pt со входом Curve-V На этом момент, ваша схема должна выглядеть как скриншот ниже. Мы создали наше определение использовав Num Pts on Curve, Wave Length, and Frequency sliders, но мы пока не можем управлять амплитудой синусоиды.
• Params/Special/Slider – выберем и перетащим еще один number slider на рабочий стол • щелчком правой кнопкой мыши зайдем в меню и введем следующие настройки: p ((название - амплитуда) уд ) o Name: Amplitude o Slider Type: Floating Point (плавающее значение тчк) o Lower Limit: 0.1 (нижний предел) o Upper Limit: 5.0 (верхний предел) o Value: 2.0 (значение) • Scalar/Operators/Multiplication - выберем и перетащим компонент Multiplication (умножение) на рабочий стол • соединим слайдер Amplitude со входом Multiplication Multiplication-A A • соединим выход-У компонента Sin с входом Multiplication-B • соединим выход Multiplication-r с входом-Y компонента Point XYZ Это соединение должно заменить существующие связи, которые ранее были подключены к выходу компонента Sin. Слайдер Amplitude - просто умножение значений Sin по шкале факторов. Слайдер управляет Y-значениями нашей синусоиды, когда вы увеличиваете значение амплитуды вы, в свою очередь, увеличивает амплитуду кривой. • Vector/Point/Point XYZ – выберем и перетащим компонент Point XYZ на рабочий стол • соединим первый выход Range-R со входом X новой точки Point XYZ • Curve/Primitive/Line – выберем и перетащим на рабочий стол компонент Line • соединим первую р у точку у Point-Pt со входом Line-B • соединим вторую точку Point-Pt со входом Line-A В последней части описания, мы создали второй набор равномерно расположенных вдоль оси Х точек, которые соответствуют значениям X-координаты кривой синус.
Компонент Line создает отрезок кривой между первым списком точек, которые создают синусоиду и втором списком точек, которые определяют ось Х. Новая линия дает визуальное представление о вертикальных перемещениях в структуре формы волны.
Мы показали, как создать синусоиду волны, однако вы можете генерировать другие синусоидальные кривые, как косинус или тангенс, путем замены компонента синус у или тангенсом которые р вы найдете д во вкладке д косинус Scalar/Trigonometry.
Простые примеры использования математических функций
Создание параметрической окружности. - Выберем и перетащим на рабочий стол числовой ползунок (Param/Special/NumericSlider), который задает количество опорных точек для окружности - компонент Range (Logig/Sets/…) сформирует диапазон точек (ареал распространения по умолчанию от 0 до1) - компонент Function (Logic/Script/…) со значением 2Pi*x означает, что диапазон чисел будет от 0 до 2 Pi и опишет полный круг. - компоненты Sin и Cos (Scalar/Trig/…) зададут угловую координату точек - компонент Pt XYZ сформирует структуру круга
3 урок Геометрические структуры
Геометрические структуры (узоры) являются одними из захватывающих экспериментов с генеративными алгоритмами Кузнечика. Мы имеем потенциал для создания мотивов и затем его распространения в качестве шаблона, который может быть использован в как основа для других продуктов проектирования и оформления. В случае разработки структуры-паттерна мы должны иметь концептуальный взгляд на наш проект/модель проект/модель, что бы суметь извлечь простую геометрию, который производит всего целую форму пока идут повторения. Итак, для создания основной геометрии мы должны скопировать созданный нами паттерн столько сколько это потребуется.
Геометрическая структура Мечети Шейха Лотфолах (Исфахан, Иран) выложенная изразцами, имеющих структуру простого паттерна, который создается простыми математико-геометрическими вычислениями.
К примеру, решили мы создать простой паттерн некоторым пересечением линий, нарисовали скетч.
Простой линейный паттерн
Начнем с того, что выберем и перетащим на рабочий стол компонент Series (Logic/Sets/Series), который будет контролировать количество точек и размер шага между ними, а их значение будет задаваться числовыми слайдерами с соответствующими названиями.
- Компонент Function (функция) определяет угловую координату наших точек (y=-x/3; y=x; y=x/3; y=x+(x/3)), значение x задает числовой слайдер. -Компоненты Point XYZ создадут четыре набора точек связанные значением Series, которое контролирует количество точек и расстояние между ними. - для создания «зиг-заг» «зиг заг» линии между точками нам нужно отсортировать их компонентом Cull Pattern с фильтром True/False и False/True и затем соединить их.
- После того как все четыре набора точек отсортированы их нужно «слить» в четыре потока, потока в этом нам поможет компонент Merge (Logic/Stream/Merge) Если полученные потоки соединить поли линией, то мы не получим желаемый результат, т.к. программа не понимает в какой последовательности их соединять. Потоки нужно проанализировать и отсортировать в нужном нам порядке.
В получившейся структуре значения У остаются не измены, а Х постепенно увеличивается…как выбрать подходящие нам по номеру точки? ? Для Д этого нужно выделить из потока координату Х для интересующих нас точек. - Компонент Decompose (Vector/Point/…) выделит X коорд. - Компонент Sort (Logic/List/…) отсортирует компоненты по значению Х координаты. - Компонент Poly Line (Curve/Spline/PolyLine) отобразит интересующий нас результат - для отображения полученного рисунка на сцене, выделяем компоненты PLine и нажмем Bake Selected («испечь» выделенное)
Отправной точкой этой структуры является набор данных,
Круглая структура который производит группу точек расположенных по (паттерн) кругу. Этот набор данных может быть масштабирован
относительно центра и с помощью него можно создать несколько групп вокруг одного центра. Они будут отобраны нами тем же образом, как и в предыдущем примере. Затем мы сгенерируем повторяющиеся 'Зиг-Заг' шаблон из этих масштабированных «звезд». Дублирование этих звезд создает определенный мотив, а с использованием различных сочетаний моделей Cull можно сделать его более интересным.
При условии, что группа точек находится в диапазоне от 0 до 2Pi и использует функции Sin и Cos. Первый числовой слайдер задает количество точек, второй изменяет радиус круга.
Увеличение значения функции Sin/Cos на числовым слайдере создает набор точек большего радиуса.
Для того, чтобы отсортировать точки, мы можем просто использовать компонент Cull pattern с фильтром значений True / False, как в предыдущем примере. Но как нам правильно отсортировать списки точек, ведь если мы подсоединим отсортированные точки поли линией мы не получим форму звезды. Здесь лучше отсортировать элементы по их порядковому номеру в последовательности. Так как точки были сгенерированы компонентом <range>, здесь нам понадобится компонент <series> для снабжения точек в списке индексами. N параметр фактора <range> определяет число шагов диапазона, при этом <range> производит N+1 шаг. И нам нужно значение <series> с N + 1 шагом индексов точек и отобрать б и отсортировать эти моменты на основе их показателей (на рис. показано генерирование индексов номеров точек).
Нам необходимо отобрать точки с одинаковыми показатели и объединить их вместе. Хотя результат слияния для <series> может быть вновь целочисленный набор данных, и поэтому мы сортируем и индексами и «ключами». Единственная вещь, которую остается сделать это подключить компонент Poly Line.
Создание поли линии по отсортированным точкам.
Та же логика может быть использована для создания более сложной геометрии просто другим набором точек, их отбор и соединения между собой в итоге приводит к созданию новых узоров. Мы можем использовать эти модели и для других процессов проектирования декоративных форм.
Трансформации
Преобразования необходимые операции в области моделирования и генерации геометрии. Они могут позволить нам получать отклонения от первоначально простой геометрии. Преобразования помогают нам в масштабе и ориентации наших объектов, перемещении, копировании и зеркальное отражение их. Может привести как результат к созданию новой формы. формы Существуют различные виды преобразований, но мы не будем их классифицировать, можно разделить их на основные отраслей, первый отдел линейных преобразований и второе пространственных. Линейные преобразования выполняются в 2D пространстве, пространственные в 3D. В другом смысле мы можем классифицировать ф по статусу преобразования исходного объекта; преобразования, как перемещение, вращение и отражение, сохраняют первоначальную форму, но масштабируют и сдвигают его относительно первоначального положения. Есть также нелинейные преобразования. В дополнение к перемещению, вращению и отражению, у нас разные типы сдвига и неоднородные преобразования масштаба в 3Dпространстве, а также спиральных и винтовых преобразований и проецирования, которые создают больше вариаций в 3D-пространстве. Для того чтобы трансформировать объекты, концептуально о це уа о нам а необходимо еоб од о д двигать а и ор ориентировать е ро а объекты (или части объектов, таких как вершины или клетка углов) в пространстве, а для этого нам нужно использовать векторы и планы в качестве основных конструкций этих математических и геометрических операций. Мы не собираемся обсуждать основы геометрии и математической логики, но давайте рассмотрим векторы и планы, планы поскольку они нужны нам для работы. работы
Трансформирование дает огромный потенциал генерирования форм. Источником вдохновения может служить природа с ее неповторимым многообразием.
В Векторы
"Вектор" Вектор является математическим/геометрическим объектом, который имеет величину (или длину), направление и значение. Начинается из точки, переходит к другой с определенной длиной и конкретным направлением. Векторы имеют широкое применение в различных областях науки, геометрии.
Просто если у нас есть точки и вектором, этот вектор может переместить точку на расстояние векторной магнитуды и направлении, создавая новую для нее позицию в пространстве. Мы используем эту простую концепцию для создания перемещения, масштабирования и ориентирования геометрии в нашей ассоциативной среде.
Рандомные (случайные) перемещения
Предположим, решили мы создать структуру состоящую из рандомных (т.е. случайным образом) перемещающихся трубок, случайной длины, переплетающихся между собой…этот забавный элемент изображен на картинке.
Думаю есть несколько путей создания этой модели. Начнем, создадим круг как основание для кривых, разделим на требуемое количество частей. Сгенерируем некоторое рандомное количество кривых через эти точки и затем создадим Pipe (трубу) по кривым. Да, но как это сделать в Кузнечике? -Компонент круг (Curve/Primitive/Circle), числовой слайдер присоединенный к R-входу контролирует его радиус. - Присоединяем наш круг к компоненту деления (Curve/Division/Divide Curve), и здесь мы контролируем число делений при помощи ползунка. Мы сгенерировали первый массив точек, которые будут началом наших трубок.
Следующим шагом будет создание второго массива точек, но они уже должны быть распределены случайным образом. Для этого нам нужно задать случайные векторы в Z направлении и переместить первый массив точек в этих случайных направлениях. - Компонент Random (Logic/Sets/Random), и компонент Unit Z (Vector/Constants/Unit Z) сформируют разнонаправленные векторы.
Итак, все готово для перемещения точек этими векторами. - Используем компонент Move (Xform/Euclidian/Move), в основном он перемещает геометрию по заданному вектору, им можно также перемещать группу объектов, он работает по образу команды Copy в самом Rhino. Для того чтобы б увидеть как работает б эта команда, нужно присоединить компонент Line.
Как видно на изображении, линии получились вертикальные, для того чтобы сделать их взаимно пересекающимися нам нужно перемешать точки при помощи компонента Jitter (Logic/Sets/Jitter)
Остальной процесс очень прост, думаю трех сегментов линии будет достаточно. Повторим перемещение и перемешивание точек для второго и третьего массива. Итак мы получили базовую геометрия. Итак, геометрия Добавим компонент Pipe (Surface/Freeform/Pipe) и соединим наши линии. Добавим числовой ползунок, для контроля радиуса трубы.
Для более удобного контроля результата можно воспользоваться Remote Control Panel, которая включается во вкладке View.
Аттракторы
В проектировании и геометрии, аттракторы – это элементы, которые воздействуют на другие тела или пространства (обычно это точка, но бывают и линейные аттракторы), изменяют их поведение и/или перемещают их, переориентируют, масштабируют… Они также могут концентрировать пространство вокруг себя и вводить поле действия д со специфическим ц ф радиусом р д у силы. В параметрическом проектировании аттракторы имеет широкий спектр использования, они могут влиять как на весь объект, так и использоваться в генерировании его составных элементов; воздействуют на группы объектов. Рассмотрим простые примеры:
Точечные аттракторы
Начнем с того, что сформируем массив точек, которые потом станут центрами полигонов. Поставим дополнительную отдельную точку которая будет служить аттрактором для нашего массива, и опишем вокруг нее окружность.
Алгоритм очень прост: основываясь на дистанции между аттрактором и массивом точек, нам нужно влиять на радиус полигонов в зависимости от их расстояния до точки притяжения, что будет определяться компонентом Distance. Но, так как расстояние может быть слишком большое, нам пригодится компонент Divide с числовым ползунком для контроля.
Расстояние делится на числа контролирующие силу аттрактора. Для удобства можно объединить компоненты точки притяжения (точку, окружность и слайдер) в кластер (выделить нужные элементы и нажать Ctrl+G или через меню Arrange. Разгруппировать элементы Ctrl+U).
Swiss Re - Foster
Как я упоминал ранее, интервалы - числовой диапазон. Они реальные цифры от нижнего предела к верхнему пределу. Поскольку я сказал вещественных чисел, значит, мы имеем бесконечное число между ними. Они отличаются типами использования для этих математических областей. Как мы экспериментировали и раньше, мы можем разделить численного интервала определенного числа и получить отделов, отделов число равномерно распределены между двумя числами. Как я уже упомянул, что у нас есть три различных частей для масштабирования факторы башню, нам нужны три различных набора номера, первая и последняя из них интервалы и средней части это просто реальное число, которое является постоянным. Давайте посмотрим на Рисунок 4.20. Здесь я использовал два компонента <interval> i t l (скалярных> ( И Интервальный> й Interval) I t l) для определения двух числовой диапазон, одна растет, и одна сокращается. Увеличение одного начинается с 1, в котором я предположил, что цокольный этаж является постоянной, а затем увеличивается до числа <номер slider>. Второй <interval> начинается с <номер слайдер> и заканчивается в другой <номер slider> которая является нижней границей. С помощью той же <номер slider> для средней части, я уверен, что средняя часть набора данных такое же, с обеих сторон.
Free-form Fabrication
Идея лазерной резки листового материала очень актуальна в эти дни для изготовления сложных форм. Есть разные пути, которые мы можем использовать для изготовления предметов. Лазерные резак костюмы методы объектов, которые построены с развертывающихся поверхностях или сложенные Ones. Можно развернуть цифровая геометрии на плоскости и просто вырезать из листа и сложите материал для создания его. его Это Также подходит для принятия сложных геометрий, что может быть сокращена до отдельных частей из плоских поверхностей и можно разобрать всю модель в цифровом виде в отдельной части, гнездятся на плоских листов, добавить перекрывающихся частей для подключения целях (например, склеивание) и отсеки ее и собирают его физически. Кроме того, Возможно изготовление двойных й объектов б кривая этим методом. Это Э б благополучие экспериментировать, чтобы найти различные разделы любые "формы объект Blob ', разрезать по крайней мере в двух направлениях и собрать эти Разделы обычно вместе с уздечка суставы и сделать ребра клетки форме модели. После лазерной резки является общим инструментом, существуют также другие способы, но все вместе важно Дело в том, чтобы найти способ, чтобы уменьшить геометрии плоских сократить их из листового материала, не бумага материи или металла, картона, дерева и, наконец, собрать их вместе (если у вас есть Robotic руку, и вы можете вырезать 3D геометрий это что-то другое!). Среди различных способов обсуждали здесь я хочу протестировать один из них в кузнечик, и я уверен, что вы можете сделать другие методы, основанные на этом опыте легко. Изготовление free-form поверхности Я решил сфабриковать в свободной форме поверхности иметь некоторые эксперименты с подготовкой вложенных частей в свободной форме объект вырезать и все другие вопросы, мы должны иметь дело.
Здесь у меня есть поверхность, и я представила эту поверхность как кузнечик <Geometry> компонент, так что вы можете ввести любой геометрии, геометрии который Вы разработали или использовать любые Кузнечик объект, который вы вызвали. Разделы, как ребра Для изготовления этой общей свободной форме поверхности, я хочу создать разделы этой поверхности, гнезда их на листах и подготовить файлы, которые будут сокращены на лазерной резки.
Если объект, над которым вы работаете имеет определенную толщину, то вы можете сократить его, но если эта поверхность, как вы не имеете любой толщины вы Необходимо добавить толщина резки деталей.
В первом шаге я использовал <Bounding Box> компонент, чтобы найти области, что я хочу работать. Тогда, используя <Explode> компонента (Surface> анализ> BRep компоненты) у меня есть доступ к своим краями. Я выбрал первое и второе (индекс 0 и 1), которые перпендикулярны друг другу.
В этом шаге я создал несколько перпендикулярных кадры рядом с каждым из выбранных края. Количество кадров в действительности число ребер, ребер что я хочу вырезать. вырезать
Ближе рассмотрение кадра образования ряда рамок в длину и ширину объекта ограничивающей коробку. Как видите, я могу начать сократить р мою поверхность р с этого кадра. др
Теперь, если я найду точки пересечения этих рамок и поверхности (основной геометрии), я на самом деле сгенерировал базовую б структуру ребер. б З Здесь я использовал <BRep Plane> из раздела компонента (Intersection> Mathematical> BRep Plane), чтобы решить эту проблему. Я использовал <Geometry> (мои первоначальные поверхности) как BRep и генерировал рамки, как плоскости чтобы снабжать секущий компонент.
Пересечение рамок и поверхности, в результате серии кривых на поверхности. Верстка Следующий шаг заключается в расположении этих сечений на плоский листа, листа чтобы подготовить их к резке. резке Здесь я нарисовал прямоугольник в Rhino с моим размером листа. Я скопировал этот прямоугольник для создания нескольких листов перекрывающихся друг с другом, и я обратил одну поверхность, которая охватывает все эти прямоугольники представляют их в Gh (кузнечик).
Я собираюсь использовать компонент <Orient> (XForm> Euclidian> Orient) для расположения моих кривые по поверхности, которая представляет собой листы для резки искомого результата. Если вы посмотрите на компонент <Orient>, вы увидите, что нам будут нужны базовые плоскости объекта, плоскости отсчета и целевых плоскости, которая должна быть на поверхности. Так как я использовал рамки для пересечения с исходной поверхностью и создания раздела кривые, я могу использовать их вновь в качестве справочных плоскостей, так что мне нужно для создания зависимых плоскостей.
Я ввел режущую плоскость в Gh (кузнечик) и использовал <surface Frame> компонент (Surface> Util> Surfaces frames) для создания серии кадров по всей поверхности. Это действительно работает, как <divide surface> но оно порождает плоскости, как производство, так точно, что мне нужно.
Ориентация. При подключении раздела кривые как база геометрий, и самолеты, которые я использовал для Создание этих разделов как геометрия ссылкой на <orient> компонента. компонента Но еще немного манипуляции необходимы для целевых плоскостях. Если вы посмотрите на <surface frame> компонентом результатов Вы видите, что если вы разделите U направлении даже 1 вы увидите, он будет генерировать 2 колонки разделить поверхности. Так что я больше самолетов, чем мне нужно.
<split> список зависимых планов по номерам, который приходит из числа ссылки кривые. Поэтому я использовать только самолеты насколько это кривая, которая у меня есть. Тогда я переехал эти самолеты 1 единица в направлении X, чтобы избежать дублирования с краю щита. Теперь я могу Подключить эти самолеты <orient> компонента, и вы можете видеть, что все кривые сейчас на вложенный резка листов листов.
Теперь у нас есть общие позиции, мы должны привлечь их. Сначала я обратил линий с <Line SDL> компонента с общих позиций в качестве стартовых точек, <unit Y> как направление, и я использовал половину ребра высота как высота строки. Итак, как вы см. Каждая точка на кривой вложенных теперь имеет крошечные линия связанные с ней.
Следующий шаг, нарисовать линию в направлении X от конечного пункта в предыдущей строке с длиной <sheet_thickness> (зависит от материала). материала)
Эта часть описания немного сложнее, но у меня пока нет более лучшего решение. решение Действительно, Действительно если Вы компенсировать первую совместную линию вы получите третью линию, а как базовая линия кривая не является прямой, она будет пересекать кривую (или не удовлетворить его), поэтому конечная точка третья строка не позиционируется на кривую. Здесь я провел линию от конечной точки второй линии, но больше, чем она должна быть, и Я собираюсь забрать ее с кривой. Но поскольку <trim i с BRep> BR компонент должен Brep B объекты б не кривые, я экструдированного база кривая, чтобы поверхность, и я снова экструдированного эту поверхность Сделать BRep закрыты. Так что если я обрезки третьей строке соединения с этим BRep, я хотел бы получить точную совместных форме, что я хочу.
Структура поверхности Diagrid
Diagrid (диагональная сетка) - конструкция для построения больших зданий из стали. Создается из треугольной структуры, т.е. с диагонально расположенными опорными балками. Она требует меньше конструктивной стали, чем обычная стальная рама. Башня Hearst в Нью-Йорке, спроектированный сэром Норманом Фостером по сообщениям, Фостером, сообщениям использует на 21 процент меньше стали, чем стандартный проект. Diagrid также устраняет необходимость в больших колоннах по углам и обеспечивает лучшее распределение нагрузки в случае угрозы безопасности. Другое здание, спроектированное сэром Норманом Фостером, Swiss Re (деловой центр), известный как "Огурчик", также использует эту структурную систему.
Структура ветвления данных.
Раньше во всех версиях Кузнечика(Gh), до версии 0.6.00xx, данные внутри параметра хранились в одном списке индексов, и как таковой он был не нужен. Однако, произошли коорденальные изменения, когда параметры Gh смогли иметь несколько списков данных внутри себя. Поэтому, когда доступны несколько списков, то встала необходимость идентификации каждого отдельного списка На схеме созданной Дэвидом Руттеном, списка. Руттеном представлено достаточно сложное, но хорошо структурированное дереводиаграмма.
В изображении выше, выше есть один основной ствол(основная ветвь) по пути {0}. Этот путь не содержит данных, но имеет 3 ответвления. Каждое из которых наследует индекс основного ствола {0} и добавляет свой собственный суб-индекса (0;1) или (0;2) соответственно. Было бы неправильно называть это "индекс", потому что это не просто единственное число. Лучше называть это "путь" путь , поскольку это похоже на структура папок в диске. Вторичные ветви также не содержат в себе информации, аналогично и с троичными ветвями. Пока мы не достигнем уровня вложенности 4 т.е. {0;0;0;1}, здесь мы наконец столкнемся с некоторыми данными (списки представлены в виде красочных толстых линии, данные в них являются яркими точками). Каждая вложенная-вложенная ветвь (на ( уровне 4)) является конечной, это означает, что они не подразделяются дальше. Данные в каждом элементе - это часть одного ветвления в дереве, и каждый элемент имеет индекс, который определяет его местоположение в пределах его ответвления.
Для дальнейшего изучения структуры дерева, рассмотрим очень простой пример. Начнем с двух кривых, на которые мы ссылаемся в кузнечике. Разделим кривые компонентом Divide (Curve/Division/Divide Curve) на 20 отдельных сегментов, что в конечном счете, дает нам 21 пунктов на каждой кривой, а список из 42 пунктов. Давайте соединим все эти точки поли линией компонентом Polyline (Curve/ Spline/Polyline), которая создаст новую линию, проходящая через точки.
Если бы мы использовали Gh более ранней версии, кривая поли линия соединила бы только одной линией, все наши точки, которых в результате такого разделения компонента кривой получилось 42. 42 И это только потому, потому что все точки хранились в одном списке (без индексов и путей), т.е. это выглядело бы так:
Однако, теперь Gh имеет возможность включать пути и ветви, и мы можем использовать эти индексы для управления поведением компонентов. Компонент Polyline создаст 2 поли линии, поскольку он знает, знает что есть 2 пути, пути каждый разделен на 20 сегментов. сегментов Структуру дерева можно посмотреть с помощью параметра Viewer (Params/Special/Param Viewer). Ниже приведен PrtScr из этого примера, который показывает, что наша структура имеет 2 пути (0, 0) и (0; 1), каждый из которых производит 1 результирующую кривую.
Индексы точек для двух результирующих линий выглядят примерно так:
Но, если бы мы все таки хотели один путь для наших точек, а не два, Gh имеет ряд новых структур дерева, вкладка Logic содержит параметры которые помогут нам в работе с ветвлениями. Компонент Flatten Tree (Logic/Tree/Flatten Tree) обрежет всю структуру дерева, т.е. все данные будут перенесены в онин список. На PrtScr ниже можно увидеть, что компонент Flatten убрал данные о двух кривых, в результате у нас одна поли линия с одним списком значений.
Также вкладка PopUp компонента Polyline содержит возможность упрощения списка данных(ветвления).