Как я могу произвольно исказить текстурированный многоугольник? - PullRequest
1 голос
/ 19 февраля 2010

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

Есть ли алгоритмы для этого?

Ответы [ 3 ]

1 голос
/ 20 февраля 2010

Звучит так, как будто вы, возможно, захотите вариацию отображения Шварца-Кристоффеля . Это тип конформного отображения, который можно использовать для деформации многоугольника в более простую область, например в диск; хотя я не реализовал это, по-видимому, это вычислительно поддается.

Для вашего приложения вы должны настроить карту от исходного многоугольника до более простой области и вычислить обратную карту для измененного многоугольника; объединение двух должно дать вам хорошее конформное отображение от оригинала к модифицированному многоугольнику.

Конформные отображения хороши и гладки, но иногда они могут вести себя не интуитивно; Я могу предположить, что анимированная версия может дать некоторые интересные "скользящие" эффекты. Конформное отображение сохранит локальные углы внутри многоугольника; это означает, что искажение размера в непосредственной близости от модифицированной вершины может быть серьезным.

1 голос
/ 05 апреля 2010

Люди работали над решением этой проблемы в течение последних десяти или двух лет, и современное состояние становится все лучше и лучше (но математика также становится все труднее). Хорошее место для начала (и вроде того, где я остановился после этого) - работа http://www.cs.technion.ac.il/~weber/Publications/Complex-Coordinates/

Прочитайте статью там и посмотрите документы в справочниках. Один из них должен дать вам алгоритм, который вы готовы реализовать.

0 голосов
/ 20 февраля 2010

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

Если вы ищете что-то более надежное, вы можете посмотреть координаты среднего значения.

...