Render.ru

Создать спираль из кортежей прямоугольников с указанным радиусом витков и шагами

Сергей Шейпак

Пользователь сайта
Рейтинг
2
#1
Исходные даные:
1. Есть кортежи прямоугольников
2. Каждый прямоугольник имеет свой цвет.
3. Каждый кортеж, это "развернутый" в плоскость виток спирали.
4. У каждого кортежа есть два свойства: радиус витка (верх и низ равны, чтобы в проекции получалась окружность) и высота витка.
5. Кортеж нужно растянуть по витку спирали, характеристики которого кортеж знает. Длина кортежа значения не имеет. Он может масштабироваться, сохраняя пропорции.
6. Все данные берутся из файла



Задача:
"Свернуть" в виток спирали каждый кортеж прямоугольников. Виток должен иметь заданные кортежу высоту и радиусы. Свести витки так, чтобы получилась спираль.

Вопрос:
Каким модифаером надо пользоваться, чтобы изогнуть группу прямоугольников в виток спирали, у которого известны радиусы и высота?

Вопрос призовой:
Уж если получится согнуть группу прямоугольников в виток спирали, как можно анимировать сей процесс сгибания?

Пробовал вручную, но не получается, пока искал решение, создав тему в другом разделе форума, наткнулся на MaxScript. Зачем напрягать руки и мучать мышку, когда есть такое мега-монстрячество?

------------------------------------------------

Альтернатива:
Мы - не такие, мы пойдем другим путем. Можно насоздавать нужное количество Helix'ов с одим витком, соответствующим параметрам, хранящимся в каждом кортеже. Затем следует ряд вопросов.

Альтернативные вопросы:
Как сконвертить объект в editable mesh и добавить побольше faces, вроде понятно (MaxScript help).
1. Не понимаю, как побить редактируемый Helix на объекты (в соотношении, как между прямоугольниками кортежа)
2. Как "вытянуть" получившиеся объекты (на рисунке практически все прямоугольники имеют свою высоту).

-----------------------------------------------

ИМХО, первый путь логичнее, второй - проще.

Работа нужна для диссера, прошу оказать помощь отечественной науке. Большое спасибо за внимание.
 

1acc

Ведущий Анимационных конкурсов
Рейтинг
16
#2
Проще будет, если отечественная наука наскребет денег на оплату труда программиста, который смастерит тебе этот скрипт.
 

Сергей Шейпак

Пользователь сайта
Рейтинг
2
#3
Спасибо за бесценный совет Я и есть программист. Мне не ясна пара моментов реализации. Неужели это такие сверхсложные вопросы?
 

1acc

Ведущий Анимационных конкурсов
Рейтинг
16
#4
Нет, тут все просто. Посидишь плотненько пару месяцев и сам во всем разберешься, тем более если программист. Когда я писал скрипт для диссертации - я не спрашивал на форумах, а штудировал хэлп по макскрипту.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#5
2 1acc Чего тут делать то ?

2 Сергей Шейпак

1. Делаеш Helix
2. Делаеш свой кортедж из Plane с нужным числом сегментации
3. Конвертируеш в меш и обьединяеш все в один
4. Добаваляш модификатор PathDeform
5. В качестве пути Helix
6. Настртаеваеш параметры и анимируеш если нужно

 

1acc

Ведущий Анимационных конкурсов
Рейтинг
16
#6
А если кортежей миллион? А если их параметры изменяются динамически?
Можно найти тут кучу всего, что можно сделать. Ну автора устроил совет в соседней ветке, точно такой же как и твой.
Значит скрипт ему не нужен.
 

Сергей Шейпак

Пользователь сайта
Рейтинг
2
#7
кортежей будет не более 20.
Параметры не изменяются динамически.
Параметры берутся из xml'ьки.

Я сейчас работаю над тем, что генерить сразу скрипт (из Java-программы), чтобы затем сразу его запускать в MAX'e.

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

Сергей Шейпак

Пользователь сайта
Рейтинг
2
#8
Подскажите, пожалуйста, как у создаваемых объектов Plane задавать Anchor point, т.е. Pivot?
По умолчанию, сакраментальная точка находится аккурат в центре объекта. Я хочу сместить ее в угол, чтобы было удобнее выравнивать свои Plane'ны, выстраивая их в ряд. Неохота каждый раз "ручками" высчитывать положение следующего Plane'a через Anchor point - Pivot предыдущего и текущего, хочу компоновать, основываясь на длине ребра.
Обгуглился, никак не удается найти. Использую Listener, но он не пишет, что нужно сделать, чтобы добраться до Pivot'a - я выбираю "affect pivot only", а в Listener'e вижу изменения координат Plane'a, но на самом деле-то я двигаю его Pivot.

Фрагмент сгенеренного скрипта:
Код:
planeitr11 = Plane pos:[0.0,0.0,0.0] length:10.714286 width:11.5310135 lengthsegs:20 widthsegs:20
planeitr12 = Plane pos:[10.714286,0.0,0.0] length:10.714286 width:11.90526 lengthsegs:20 widthsegs:20
planeitr13 = Plane pos:[21.428572,0.0,0.0] length:10.714286 width:11.5310135 lengthsegs:20 widthsegs:20
Из-за того, что "якорь" в центре, Plane'ны наползают друг на друга.
Спасибо.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#9
Сергей у тебя есть параметры ширина и высота для каждого plane вычислить смещение для позиции с учетом что Pivot в центре математика на уровне второво класса. Со смещенным пивотом тебе понадобиться вычислять еще и его позицию через матрицы, тебе оно надо ? Пивот лучше не трогай.
 
Сверху