[Перевод] Витая архитектура

b0eeba2d1ea44737880fff34cdb57576.png


Перевод поста Кристофера Карлсона (Christopher Carlson) «Twisted Architecture».
Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko за помощь в переводе.

Я не ставил перед собой задачу скрутить Херст-тауэр (Hearst Tower) Нормана Фостера в ленту Мёбиуса и отправить его в космос, или заставить его Мэри-Экс танцевать танго с самим собой, просто я увлекся. Это один из профессиональных рисков работы с Mathematica.

Всё началось с невинного эксперимента в лофтинге — методике также известной как обтягивание (skinning), пришедшей из судостроительства. Целью моего исследования были некоторые трёхмерные формы, а лофтинг казался отличным способом быстро добиться результатов. Я написал функцию Loft, которая принимает упорядоченное множество трёхмерных контуров и обтягивает его полигонами.

36f2445e7fc11622511ea5a071431d92.png
Для декомпозиции геометрии полигонов из их топологии Loft использует примитивы GraphicsComplex в Mathematica. Координаты точек контура собраны в первом аргументе. Вторым аргументом является список полигонов (Polygons), значения координат которых заменяются целочисленными индексами в списке координат. Функцию Loft написать было несложно, однако потребовалось проявить фантазию с индексацией полигонов, связанных с нужными точками.

27f9e08fcd42b954c3414cbb995107dc.png

Я работал с Loft посредством фунции Manipulate, и был весьма рад обнаружить в своём исследовании некоторые новые и интересные формы. Вы можете скачать демонстрацию и попробовать сами.

10870a8ca891955f3d81e7a89e9b5718.png

d67ed7ff03ac41bab3c1c5bb6a9663a2.gif

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

66579c8ff429c0f71adb6b87bc507d03.png

Последняя из этих форм навела меня на мысли о здании Swiss Re Нормана Фостера в Лондоне, которое местные жители называют огурцом (далее — Мэри-Экс).

cb1492bcf7b193e5b8b4583eb22a5615.png

Я удивился, насколько правдоподобная получается модель Мэри-Экс в Mathematica. Сразу было ясно, что моя простая функция Loft не справилась бы с созданием диагональной сетки Мэри-Экс, потому я решил сперва обобщить эту функцию.
Шаг за шагом, и вот я уже имел значительно более гибкую функцию Build, с помощью которой у меня появилась возможность смоделировать не только Мэри-Экс, но и множество других архитектурных форм, основанных на комбинации панелей и их обрамления.

Моя функция Build работает как Loft, однако даёт гораздо больше гибкости в указании таких элементов, как трубки и полигоны и алгоритмов их размещения на сетке контура. Как и у Loft, у Build первым аргументом является набор контуров. Вторым аргументом является список примитивов Graphics3D, которые содержат дополнительный аргумент, который определяет алгоритмы их размещения на сетке контура.

Если представить контуры пронумерованными снизу вверх и точки на контуре слева направо, то индексы {точка, контур} будут соответствовать координатам целочисленной системы координат.

Вот как примитив Polygon[{{0,0},{1,2},{1,0}}] размещается на координатной сетке.

ea6942097c908ace32fe02452d26f6f8.png

Примитив, который не содержит дополнительного аргумента повторения, автоматически копируется по сетке. Явный способ указания типа размещения копий элемента осуществляется заданием пары векторов переноса, как в Polygon[{{0,0}, {1,2}, {1,0}}, {{2,0}, {1,1}}]. Вот как этот полигон будет размещаться на сетке:

54eaef9d54779054088e129294a8a5c7.png

В линейных примитивах, таких как Line и Tube, аргумент повторения задает частоту, с которой примитивы транслируются горизонтально, а для горизонтальных примитивов — вертикально. Комбинируя повторы полигонов, трубок и линий, Build дает мне большую гибкость в задании сборок из панелей и конструктивных элементов. Вот абстрактная структура, которую я создал для демонстрации использования примитивов Build.

d31474073ec227ee6aff01ea1eafa79a.png

6c17b6b34165d7925cc84c1e92f13499.png

Теперь, когда есть Build, моя следующая задача заключается в определении формы профиля Мэри-Экс и построения соответствующей ему сетки контура. Как и всегда, пытаясь сперва найти лёгкий путь, сперва я экспериментировал со сплюснутыми эллипсоидами, и в результате обнаружил, что верхняя часть Мэри-Экс слишком остра для эллипсоида. Ни одна другая простая математическая форма не приходила мне на ум, потому я решил задать контур произвольной формы через сплайны.

Я вспомнил эту демонстрацию с гончарным кругом (Potter«s Wheel Demonstration), написанную моим коллегой Ю-Сун Чаном для моделирования тел вращения произвольной формы. Это было именно то, что нужно.

3891b683ff6a4ada948ff01699c4dee6.gif

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

3885717c7a3df9b62bba47c59e4d7903.png

Когда я был удовлетворен результатом, я использовал «Paste Snapshot» в Manipulate для получения исходного кода этой фигуры. Из исходного кода я взял координаты контрольных точек сплайна и вставил их в BSplineFunction, которая задает профиль.

80c0a074628dd2000149e15621de4430.png

Заключительным шагом было разбить профиль кривой на равноотстоящие горизонтальные участки. Универсальные функции по сеточному разбиению в Mathematica позволяют осуществить подобное.

0f9744bcf6c4ae8d349ce7336b2ca539.png

ec58a71c47eda11c4b82a233d5b782f7.png

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

c5c351c30eb9b313ee84d04ec9eae7f5.png

Сами контуры соответствуют телу вращения, притом радиальная координата точек профиля — x, высотная координата — y, а число точек вокруг контура — удвоенное число стеклянных панелей Мэри-Экс.

bb3227ae399221b6cc1525159d444f8d.png

Я протестировал Build на предмет корректного отображения контурных точек. Получилось то, что нужно.

c35a319725321aee88b54bb64e0b471a.png

4cb6a17b6dc3073ecec8fcd2356349ab.png

В качестве заключительного этапа я нашел координаты точек контура окаймляющего кольца у вершины Мэри-Экс и добавил его.

Я не буду отрицать, что потребовалось довольно много кропотливой работы с Build для построения готовой модели. Корпус Мэри-Экс, крыша, верхний купол, кольца, границы и переходы между отдельными частями — все требовало индивидуального подхода. Чтобы выбрать свойства материалов и освещения, я использовал Manipulate и крутил ползунки, пока не получил нужные значения. И вот результат.

4e3685be9c7da9fed72532744e59c004.png

После того, как я получил законченную модель, я мог бы начать её исследование. Одним из уникальных преимуществ Mathematica является возможность постобработки структур через использование правил замены. Итоговая модель Мэри-Экс была представлена в тех цветах, которые я задал для тёмных и светлых панелей корпуса здания. Заменяя эти цвета на новые, я создал эту цветовую вариацию по мотивам британского флага.

02c950b767e306767ff921b0b75145f7.gif

f6a96d003e19369ae3b3bf3017ca32cc.gif

bce590bb52a2bf881abc34f4e7c80e55.png

db95e6bfdbde2313a7288e7843e4871d.png

Пост-обработка с помощью правил замены может быть применена не только к атрибутам внешнего вида объекта, но и к его геометрии. И то, что все из координаты моей модели находятся в первом аргументе GraphicsComplex, делает преобразования координат особенно легким. И поскольку все графические примитивы привязаны к тем же координатам, то примитивы автоматически будут перемещаться вместе с координатами при их преобразованиях.

Используя эту методику, я написал этот Manipulate для исследования вариаций в радиальной геометрии Мэри-Экс.

1baca816f1baa419c8ddfdc25c3d4e18.png

ba7a9df3a07963a5d2585369ed7dc6cf.png

Теперь у меня появилась возможность получить ответы на некоторые интересные вопросы. А что, если бы Мэри-Экс был бы двусторонний, а не округлый? Трёхсторонний? Четырёхсторонний?

db23b668893c1c8994ce13ff5aa0d30c.png

А что, если бы темные составляющие Мэри-Экс были бы утоплены в здание? А что, если бы выемки были бы им противонаправлены? А что, если бы Лондон сотрясло поистине сильным землятресением?

1198760f942d728b71c6fe4530e63594.png

Ответы на все эти вопросы легко можно получить с Manipulate в Mathematica. Сюрреалистичность — определяется просто как расстояние, на которое сдвинут ползунок от его положения, соответствующего «реальности». Мои исследования завершились где-то около этого (в стиле Дали) танцующего с собой Мэри-Экс.

7db07c204ab7f655d06e17f98cd63a8e.png

Вдохновлённый результатами своей работы с Мэри-Экс, я обратил внимание на другое здание Фостера с диагональной сеткой — Hearst Tower в Нью-Йорке.

9e73abb17ad0888c4a119ca83bdf5ed3.png

По сравнению с Мэри-Экс, моделирование Hearst Tower было плёвым делом. Единственным сложным моментом было создание угловых областей с попеременно выступающими и утопающими полигонами. Остальное было за простым использованием функции Build. Вот моя модель основной структуры башни, визуализированная с освещением по умолчанию в Mathematica.

6806ac2e47c10797143494a23f8a7c87.png

Структура башни создаётся периодической трансляцией полигонов. Шутки ради, я заменил трансляцию на вращение, а после добавления нескольких этажей я создал эту изогнутую башню, свёрнутую в тор.

554628f8665abf3a26668a4ea4f9a1d1.png

Решив пойти дальше, я потратил ещё пару секунд, чтобы добавить второе вращение вокруг оси, перпендикулярной первой и создал вот такое «мёбиусное» здание. Мне нравится эта красивая ритмика, порождаемая сочетанием диагональной сетки с изгибами и витиеватостью мёбиусной поверхности.

160702d2ac7b94a2e6ed9249e3915e1b.png

Пожалуй, на Земле, здание Мёбиуса было бы сложно продать. Но я представляю его плавающим в космосе — космическую галерею изящных искусств — эдакая орбитальная галерея Гуггенхайма с изюминкой, в которой посетителям говорят что-то вроде:

Не забудьте одеть свои тапки-липучки и мягкие шлемы ala 2001: A Space Odyssey и обратите внимание на произведения, висящие на стене справа от вас. После того, как сделаете круг по галерее, вы будете висеть на потолке, глядя на противоположную стену, которая, конечно же, есть всё та же стена — ведь она единственная в галерее. Наслаждайтесь видом Млечного Пути, и, возможно, летающей где-то вдалеке Землёй.


b8e978f9a981328aff222b7827d9c68c.png

e096c3a4e05b806cf1242fb161d5d8ae.png

© Habrahabr.ru