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