MaxScript получение координат точек сплайна

Автор
Сообщение
На сайте c 07.08.2009
Сообщений: 721
Питер

Всем привет. Вопрос собственно такой: нужно получить отдельно координаты точек сплайна. Вот так можно получить все координаты каждой точки сразу. 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=?

На сайте c 07.08.2009
Сообщений: 721
Питер
Цитата Evilis:
Цитата eugene132003:
x=? y=? z=?

если правильно вас понял

да. почти оно! спасибо. только вопрос: можно ли эту переменную потом в float или double кинуть? мне нужно сравнивать будет значения

На сайте c 07.08.2009
Сообщений: 721
Питер
Цитата Evilis:
Цитата eugene132003:
мне нужно сравнивать будет значения

с чем? что вы в общем хотите получить?

я хочу сравнить координаты точки одного сплайна №1, найти точки с такими похожими координатами у сплайна №2 и назначить им координаты точки сплайна №1. если бы это был один сплайн, то вручную это было бы выделение близких точек и клавиша "Fuse"

На сайте c 07.08.2009
Сообщений: 721
Питер
Цитата Evilis:
Цитата eugene132003:
я хочу сравнить координаты точки одного сплайна №1, найти точки с такими похожими координатами у сплайна №2 и назначить им координаты точки сплайна №1. если бы это был один сплайн, то вручную это было бы выделение близких точек и клавиша "Fuse"

В таком случае это все не пойдет )

как быть? другой алгоритм?

я понимаю, что перебор - это жесть как долго.

забыл добавить: использовать собираюсь точки сплайна №2 только те, которые расположены около точек сплайна №1. Например, если т2 сплайна №2 лежит около т6 сплайна №1, то т2 сплайна №2 получает координаты т6 сплайна №1.

На сайте c 31.03.2008
Сообщений: 1104
Москва
Цитата eugene132003:
перебор - это жесть как долго.

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

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

Тогда остается перебор. Хотя бы закешируйте позиции в массив, не берите их каждый раз из сплайна.

На сайте c 07.08.2009
Сообщений: 721
Питер
Цитата -NiK-:
Цитата eugene132003:
перебор - это жесть как долго.

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

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

Тогда остается перебор. Хотя бы закешируйте позиции в массив, не берите их каждый раз из сплайна.

с многомерных массивов и начал. было бы хорошо, если бы как в джаве был вариант дерева. там поиск удобен. хотя тут find тоже сойдет. точек будет много. не 2-3 сотни, скорее 500-800. да и сплайны будут состоять из нескольких частей. как алгоритм пока только забить все в массив и сравнивать сначала по X, потом то, что в диапазоне трешхолда, сравнивать по Y и оставшиеся Item прогнать на сравнение по Z. большего пока не придумал.

На сайте c 31.03.2008
Сообщений: 1104
Москва
Цитата eugene132003:
с многомерных массивов и начал

Я имел в виду это . Мы говорим об одном и том же?

Если у вас уже есть подобное решение, то вам остается лишь брать distance между двумя point3 и сравнивать с трешолдом.

На сайте c 19.01.2012
Сообщений: 74
Оттуда
Mozart:


Пожизненный бан
Цитата eugene132003:
как алгоритм пока только забить все в массив и сравнивать сначала по X, потом то, что в диапазоне трешхолда, сравнивать по Y и оставшиеся Item прогнать на сравнение по Z. большего пока не придумал.

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

для примера 2 сплайна каждый по 2к точек примерно 4 секунд думаю терпимо если речь не реалтайм или сотни итераций.

https://pastebin.com/vTKQvvB2  

На сайте c 07.08.2009
Сообщений: 721
Питер

супер идеи, ребята! спасибо. пошел разбираться с алгоритмами.

Написал. хоть и криво, но как умею пока. вот только не знаю, как прикрепить сюда

Написал, как смог (увы, пока не профи). https://disk.yandex.ru/d/xSffKJojf_j_9A Искать здесь:

результат будет такой:

На сайте c 19.01.2012
Сообщений: 74
Оттуда
Mozart:


Пожизненный бан
eugene132003 ты крут, он работает на безиерах тоже? т.е. не только точки но и крувую свелдит?
На сайте c 31.03.2008
Сообщений: 1104
Москва

https://pastebin.com/73BMkjYY 

Вот вам версия немного почище, с поддержкой undo и понимающая не только Line.

Быстрее скрипт конечно не стал, но если речь идёт о двух сплайнах по 1000 точек, то текущие ~500ms вполне адекватны.

Отмечу также, что не стоит использовать глобальные переменные в таком количестве, с такой целью и именами типа th :)

На сайте c 07.08.2009
Сообщений: 721
Питер
Цитата -NiK-:

Отмечу также, что не стоит использовать глобальные переменные в таком количестве, с такой целью и именами типа th :)

Огромное спасибо за помощь в написании скрипта. Пишу их для себя. Это первый, который вообще выложил. А так, да - правило обязательного комментирования действий и "говорящих" названий переменных никто не отменял. А то читаешь код, а там как-будто кто-то обфускатором прошелся smiley-biggrin.gif

Цитата Slazzo:
он работает на безиерах тоже? т.е. не только точки но и крувую свелдит?

По идее, да. А тот вариант, что выложил -NIK-, еще и более чистый по коду и больше учитывает нюансов при работе.

На сайте c 26.05.2018
Сообщений: 339
Mary
по идее теперь должен какой-то чувак полезть в эту тему со своим офтопом, и нести чушь. ждем
На сайте c 07.08.2009
Сообщений: 721
Питер

а теперь бы написать скрипт для подгона под базовую кривую бесконечного количества сплайнов... займусь по возможности :-) а если еще и под меш...

Читают эту тему: