Развертка 2D контура
От: st05148  
Дата: 25.12.14 20:44
Оценка:
Привет всем,
Нужна методическая помощь (тыкнуть носом в плане куда копать для решения такой задачи:
Есть 2D фигура — замкнутый контур, состоящий из линий, которые заданы точками. Либо прямые,либо сплайны.


Нужно взять одну из линий ("база"), развернуть её в прямую с сохранением длины,а все остальные кривые нужно соответсвенно перестроить.
То есть нужно "разогнуть" контур по какой-то базовой линии. Собственно как развернуть базу — вопросов нет. Меряю исходную длину, и откладываю прямой отрезок..А вот с остальными проблема..Вообще нет идей какую математику тут использовать..Подскажите куда копать, и что почитать по таким задачам?
Спасибо
Re: Развертка 2D контура
От: Кодт Россия  
Дата: 26.12.14 15:11
Оценка:
Здравствуйте, st05148, Вы писали:

S>Нужно взять одну из линий ("база"), развернуть её в прямую с сохранением длины,а все остальные кривые нужно соответсвенно перестроить.

S>То есть нужно "разогнуть" контур по какой-то базовой линии. Собственно как развернуть базу — вопросов нет. Меряю исходную длину, и откладываю прямой отрезок..А вот с остальными проблема..Вообще нет идей какую математику тут использовать..Подскажите куда копать, и что почитать по таким задачам?
S>Спасибо

Каждой точке опорной кривой однозначно соответствует точка разогнутой прямой.

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

По расстояниям на пенпердикулярах — есть простой способ и сложный.
Простой — считать, что расстояния сохраняются, то есть, если некая точка исходной фигуры была на удалении d от опорной кривой, то и в разогнутой фигуре она будет на том же удалении (и, естественно, по ту же сторону).
Сложный способ — устремить радиус кривизны R данной точки кривой в бесконечность, при этом преобразование координат станет нелинейным, но на малом удалении (d < R) близким к линейному. (Забыл, как называется такая проекция).
Перекуём баги на фичи!
Re: Развертка 2D контура
От: Chorkov Россия  
Дата: 29.12.14 10:19
Оценка: 6 (1)
Здравствуйте, st05148, Вы писали:

S>Привет всем,

S>Нужна методическая помощь (тыкнуть носом в плане куда копать для решения такой задачи:
S>Есть 2D фигура — замкнутый контур, состоящий из линий, которые заданы точками. Либо прямые,либо сплайны.
S>Image: fl.jpg

S>Нужно взять одну из линий ("база"), развернуть её в прямую с сохранением длины,а все остальные кривые нужно соответсвенно перестроить.

S>То есть нужно "разогнуть" контур по какой-то базовой линии. Собственно как развернуть базу — вопросов нет. Меряю исходную длину, и откладываю прямой отрезок..А вот с остальными проблема..Вообще нет идей какую математику тут использовать..Подскажите куда копать, и что почитать по таким задачам?
S>Спасибо

Попробуй конформное отображение комплексной плоскости.
Рассмотрим точки на плоскости, как точки комплексной плоскости.
Вымираем несколько точек на базе (x_k) вычисляем куда они должны тобразиться x'_k
Ищем комплексную функцию, которая отображает точки куда надо: .
(решаем систему линейных уравнений на a_i).
Не берите слишком много точек на базе, иначе полином окажется слишком высокой степени, и удаленный от базы объекты начнут "рассыпаться".

Если база "слишком кривая" и малым числом точек обойтись не удается, можно попробовать искать обратное преобразование (x'->x), выбрав базисные функции (по которым строим полином) так, чтобы они затухали при удалении от базы в направлении тела фигуры.
Например: http://latex.codecogs.com/gif.latex?x%27_k%20%3D%20%5Cvarphi%20%5Cleft%20%28%20x_k%20%5Cright%20%29%3Dx_k&amp;plus;%5Csum_i%20%5Cfrac%7Ba_i%7D%7Bx_k-c_i%7D
Где точки C_i разбросаны "под базой":

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.