|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.07.2015, 11:12 | #1 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Морфинг или интерполяция?
Здравствуйте.
Интересует вот такой вопрос. Допустим есть прямая которую мне нужно отредактировать. То есть тяну за точку и вся линия должна изменятся плавно. На первый взгляд вроде бы можно положения точек по некоторой функции чтобы получилось как на рисунке: Причем также не совсем понятно как определять края этой функции если линия допустим очень длинная или вообще кривая. Ну это предисловие. Собственно нужно сделать такой же алгоритм но для 3Д тела. Чтобы можно было например выбелить контур окружности и сжать. Но чтобы близлежащие точки также плавно сходились в конус. Типа из шарика сделать песочные часы путем сжимания экватора. Подобный механизм еще используют в играх при создании персов. Можно сделать толстым или тощим. Так вот подскажите пожалуйста что за алгоритм используется для такого плавного изменения? Есть где нибудь исходники или хотя бы толковое и понятное описание?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. Последний раз редактировалось WorldMaster; 31.07.2015 в 11:14. |
31.07.2015, 12:12 | #2 |
Форумчанин
Регистрация: 27.01.2014
Сообщений: 115
|
Кажется, это делается сплайнами.
http://3deasy.ru/3dmax_uroki/splines.php https://ru.wikipedia.org/wiki/B-%D1%...B0%D0%B9%D0%BD https://ru.wikipedia.org/wiki/%D0%9A...B0%D0%B9%D0%BD библиотека сплайнов http://alglib.sources.ru/interpolation/spline3.php |
31.07.2015, 12:22 | #3 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Цитата:
В 3D модели точки разбросаны в хаотичном порядке ... Из них прямую не построить ...
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
|
31.07.2015, 13:10 | #4 |
Форумчанин
Регистрация: 27.01.2014
Сообщений: 115
|
Если у вас точки, как вы говорите, разбросаны в хаотичном порядке, то конечно, вы ничего не сделаете - это же просто точки.
Если же вы имеете какой-то конкретный объект, то для его построения вы используете какую-то структуру точек, а не просто хаотический набор данных. В целом, логика изменения криволинейной поверхности ничем не отличается от логики изменения линии - вы берете точку, тянете ее, а все остальные точки изменяются относительно близости к изменяемой. Криволинейная поверхность как правило строится триангуляцией, значит при изменении одной точки вы будете изменять другие точки треугольника - они являются смежными с изменяемой точкой. Всё остальное - это непосредственно то, как вы сами хотите видеть изменения. Поищите машинную графику, имхо, так просто готовые алгоритмы трехмерных преобразований наподобие 3dmax найти не просто. |
31.07.2015, 13:26 | #5 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Цитата:
Просто я подумал что ктото сталкивался в жизни с подобными задачками. И наверняка где то есть решение .. Я даже не могу правильно сформулировать что гуглить .. как фразу строить ..
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
|
31.07.2015, 14:27 | #6 |
Форумчанин
Регистрация: 27.01.2014
Сообщений: 115
|
Смотрите, у вас есть точка, которую вы тяните, а есть точки, которые вы изменяете.
Вспоминаем постулат Через две точки можно провести прямую. Вот вам ваш же рисунок, который вы показали в первом посте. Соответственно, вам необходимо написать функцию (она же система уравнений) вашего преобразования, которая бы получала аргументы - точку которую вы тяните, и точку которую вы преобразуете, преобразование координат, которое вы выполняете и выдавала новые координаты преобразуемой точки. Теперь смотрите, основных преобразований всего три: перенос растяжение поворот Алгоритмы стандартные. Нестандартные алгоритмы - вытяжение относительно точки. Но сама точка изменяется таки стандартным переносом. Сглаживание можете реализовать как я писал выше - взять точку переноса, взять вторую, построить плоскость, в которой будет ваша прямая сглаживания и вычислить сглаженные координаты для второй точки. Либо, выбрать некоторое количество плоскостей сглаживания, в которых будет находиться точка, за которую вы тяните, а все остальные спроецировать на эти плоскости в которых произвести преобразования, а затем восстановить точки в пространстве. Но это на мой взгляд сложнее. |
31.07.2015, 18:11 | #7 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Цитата:
Я расстроен ...
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
|
31.07.2015, 22:26 | #8 |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
Мне кажется "основные преобразования" тут не при чём...
В 3д вы тянете не одну из хаотичных точек, а часть поверхности одного из объектов за одну (кстати или несколько) его точек. Вслед тянутся грубо говоря соседние точки поверхности. Сейчас не вспомню и названий алгоритмов. Попробую поискать. |
31.07.2015, 22:35 | #9 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
В общем посмотрел как работает блендер. Можно пошукать в исходника блендера функции но лень .. пришла такая идея.
Задать функцию сглаживания. например кубический корень или линейную или параболическую. Далее задать радиус действия. и затем просто по формуле функции выстраивать множество окружностей начиная от вершины за которую тянем и заканчивая точками, расположенными не далее радиуса действия ... дальше подтягивать точки до этих окружностей. Наверное вместо окружностей можно найти формулу поверхности в основе которой парабола например .. как фигура вращения... и там вообще просто. Найти проекции точек на эту поверхность. Возможно что это не самый оптимальный вариант .. но именно эту суть я увидел в работе майя и блендера. Попробую на днях сделать это на простейшей плоскости и там дальше и до криволинейных объектов доберемся.. Как считаете правильное направление?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
31.07.2015, 23:34 | #10 |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
Пока я не вспомнил как эта штука называлась и где я её читал - попробовать стоит.
В блендере вроде это задавалось кривой Безье в параметрах. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
“Кусочно-линейная и квадратичная интерполяция. Глобальная интерполяция ”. | KennyMc | Помощь студентам | 0 | 17.04.2012 16:48 |
Разработать программу “Кусочно-линейная и квадратичная интерполяция. Глобальная интерполяция ”. | KennyMc | Помощь студентам | 0 | 10.04.2012 16:41 |
На C++ Разработать программу “Кусочно-линейная и квадратичная интерполяция. Глобальная интерполяция”. | KennyMc | Помощь студентам | 0 | 26.02.2012 12:08 |
Морфинг двух изображений. | meta | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 04.12.2011 18:08 |
Интерполяция изображений(Сплайн интерполяция)?????) | Danyla | Помощь студентам | 0 | 13.04.2010 09:08 |