Всем привет. Вопрос собственно такой: нужно получить отдельно координаты точек сплайна. Вот так можно получить все координаты каждой точки сразу. spl = selection[1]for s = 1 to (numsplines spl) do(for k = 1 to (numknots spl s) do(format "spline_%_knot_%_pos = %\n" s k (getKnotPoint spl s k)))
Но как получить координаты именно по осям отдельно: x=? y=? z=?
я хочу сравнить координаты точки одного сплайна №1, найти точки с такими похожими координатами у сплайна №2 и назначить им координаты точки сплайна №1. если бы это был один сплайн, то вручную это было бы выделение близких точек и клавиша "Fuse"
я хочу сравнить координаты точки одного сплайна №1, найти точки с такими похожими координатами у сплайна №2 и назначить им координаты точки сплайна №1. если бы это был один сплайн, то вручную это было бы выделение близких точек и клавиша "Fuse"
В таком случае это все не пойдет )
как быть? другой алгоритм?
я понимаю, что перебор - это жесть как долго.
забыл добавить: использовать собираюсь точки сплайна №2 только те, которые расположены около точек сплайна №1. Например, если т2 сплайна №2 лежит около т6 сплайна №1, то т2 сплайна №2 получает координаты т6 сплайна №1.
Смотря о каком количестве точек идет речь. Если это пара сотен, то можно не заморачиваться и перебирать каждую. Если их гораздо больше, то в ход идут алгоритмы собирающие точки в таблицы или деревья, чтобы ограничить круг поиска для каждой точки.
Готовых решений на максскрипте я не видел. Сам я писал 2д лукап для коллапса точек анврапа, но даже если бы я захотел им поделиться, он бы вам не подошёл без значительных изменений. Осмелюсь предположить, что раз вы задаёте подобные вопросы, то видимо эти алгоритмы будут вам пока не по зубам.
Тогда остается перебор. Хотя бы закешируйте позиции в массив, не берите их каждый раз из сплайна.
Смотря о каком количестве точек идет речь. Если это пара сотен, то можно не заморачиваться и перебирать каждую. Если их гораздо больше, то в ход идут алгоритмы собирающие точки в таблицы или деревья, чтобы ограничить круг поиска для каждой точки.
Готовых решений на максскрипте я не видел. Сам я писал 2д лукап для коллапса точек анврапа, но даже если бы я захотел им поделиться, он бы вам не подошёл без значительных изменений. Осмелюсь предположить, что раз вы задаёте подобные вопросы, то видимо эти алгоритмы будут вам пока не по зубам.
Тогда остается перебор. Хотя бы закешируйте позиции в массив, не берите их каждый раз из сплайна.
с многомерных массивов и начал. было бы хорошо, если бы как в джаве был вариант дерева. там поиск удобен. хотя тут find тоже сойдет. точек будет много. не 2-3 сотни, скорее 500-800. да и сплайны будут состоять из нескольких частей. как алгоритм пока только забить все в массив и сравнивать сначала по X, потом то, что в диапазоне трешхолда, сравнивать по Y и оставшиеся Item прогнать на сравнение по Z. большего пока не придумал.
как алгоритм пока только забить все в массив и сравнивать сначала по X, потом то, что в диапазоне трешхолда, сравнивать по Y и оставшиеся Item прогнать на сравнение по Z. большего пока не придумал.
алгоритм наивный и ничем не лучше чем просто сравнить растояние, пусть и будет там несколько умножении и корень но ефективнее чем сортировка масивов.
для примера 2 сплайна каждый по 2к точек примерно 4 секунд думаю терпимо если речь не реалтайм или сотни итераций.
Отмечу также, что не стоит использовать глобальные переменные в таком количестве, с такой целью и именами типа th:)
Огромное спасибо за помощь в написании скрипта. Пишу их для себя. Это первый, который вообще выложил. А так, да - правило обязательного комментирования действий и "говорящих" названий переменных никто не отменял. А то читаешь код, а там как-будто кто-то обфускатором прошелся
Цитата Slazzo:
он работает на безиерах тоже? т.е. не только точки но и крувую свелдит?
По идее, да. А тот вариант, что выложил -NIK-, еще и более чистый по коду и больше учитывает нюансов при работе.