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

Автор
Сообщение
Возраст: 39
Пол: М
На сайте c: 07.08.2009
Сообщения: 698
Откуда: Питер

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

Возраст: 39
Пол: М
На сайте c: 07.08.2009
Сообщения: 698
Откуда: Питер
Цитата Evilis:
Цитата eugene132003:
x=? y=? z=?

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

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

Возраст: 39
Пол: М
На сайте c: 07.08.2009
Сообщения: 698
Откуда: Питер
Цитата Evilis:
Цитата eugene132003:
мне нужно сравнивать будет значения

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

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

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

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

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

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

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

Возраст: 37
Пол: М
На сайте c: 31.03.2008
Сообщения: 961
Откуда: Москва
Цитата eugene132003:
перебор - это жесть как долго.

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

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

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

Возраст: 39
Пол: М
На сайте c: 07.08.2009
Сообщения: 698
Откуда: Питер
Цитата -NiK-:
Цитата eugene132003:
перебор - это жесть как долго.

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

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

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

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

Возраст: 37
Пол: М
На сайте c: 31.03.2008
Сообщения: 961
Откуда: Москва
Цитата eugene132003:
с многомерных массивов и начал

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

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

Возраст: 102
Пол: М
На сайте c: 19.01.2012
Сообщения: 56
Откуда: Оттуда
Цитата eugene132003:
как алгоритм пока только забить все в массив и сравнивать сначала по X, потом то, что в диапазоне трешхолда, сравнивать по Y и оставшиеся Item прогнать на сравнение по Z. большего пока не придумал.

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

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

https://pastebin.com/vTKQvvB2  

Возраст: 39
Пол: М
На сайте c: 07.08.2009
Сообщения: 698
Откуда: Питер

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

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

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

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

Возраст: 102
Пол: М
На сайте c: 19.01.2012
Сообщения: 56
Откуда: Оттуда
eugene132003 ты крут, он работает на безиерах тоже? т.е. не только точки но и крувую свелдит?
Возраст: 37
Пол: М
На сайте c: 31.03.2008
Сообщения: 961
Откуда: Москва

https://pastebin.com/73BMkjYY 

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

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

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

Возраст: 39
Пол: М
На сайте c: 07.08.2009
Сообщения: 698
Откуда: Питер
Цитата -NiK-:

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

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

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

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

Возраст: 28
Пол: М
На сайте c: 26.05.2018
Сообщения: 213
Откуда: Mary
по идее теперь должен какой-то чувак полезть в эту тему со своим офтопом, и нести чушь. ждем
Возраст: 39
Пол: М
На сайте c: 07.08.2009
Сообщения: 698
Откуда: Питер

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

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