У меня есть интересная проблема, которую я пытался решить некоторое время. Здесь нет «правильного» решения, как нет и строгих критериев успеха. Чего я хочу добиться, так это плавного перехода между двумя простыми многоугольниками, от многоугольника A к многоугольнику B. Многоугольник A полностью содержится внутри многоугольника B.
Мои критерии для этого перехода:
- Переход непрерывен во времени и пространстве
- Область, которая «заливается» из многоугольника A в многоугольник B, должна быть заполнена, как если бы в A была жидкость, которая выливалась в форму B.
- Важно, что эта анимация может быть рассчитана либо на лету, либо задана набором параметров, которые занимают мало места, скажем, менее нескольких Кб.
Обман - это прекрасно, любой способ решить эту проблему, чтобы она выглядела хорошо, - возможное решение.
Решения, которые я рассмотрел и в основном исключил:
- Соединяем вершины в A и B и просто интерполируем. Не будет хорошо выглядеть и не работает в случае вогнутых полигонов.
- Разделение области B-A на выпуклые многоугольники, возможно, диаграмму Вороного, и вычисление дискретных состояний многоугольника путем выполнения BFS на меньших выпуклых многоугольниках. Затем я интерполирую между дискретными состояниями. Примечание. Если многоугольник B-A выпуклый, переход довольно тривиален. Я не стал использовать это решение, потому что разделить B-A на маленькие выпуклые многоугольники одинакового размера было на удивление сложно.
- Моделирование: Разделите полигон А. Переместите каждую вершину вдоль линии полигона по нормали (наружу) дискретными, но небольшими шагами. Для каждого шага проверяйте, находится ли вершина внутри B. Если нет, то вернитесь в предыдущую позицию. Повторяйте, пока A не станет равным B. Мне не нравится это решение, потому что проверка того, находится ли вершина внутри многоугольника, выполняется медленно.
У кого-нибудь есть другие идеи?