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

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

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

Возраст: 0
Пол: М
На сайте c: 06.03.2009
Сообщения: 23
Откуда: ░░Пандорa░░
Цитата eugene132003:
x=? y=? z=?

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

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

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

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

Возраст: 0
Пол: М
На сайте c: 06.03.2009
Сообщения: 23
Откуда: ░░Пандорa░░
Цитата eugene132003:
мне нужно сравнивать будет значения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

https://pastebin.com/vTKQvvB2  

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

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

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

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