5

Я изучал сеть для алгоритма, который позволяет создавать уровни детализации (LOD) двумерных многоугольников, но я не могу найти ЛЮБОЙ достойный справки. Возможно, я использую неправильные условия поиска, но все результаты поиска для алгоритмов 3D LOD, которые, я думаю, не могут (?) Действительно применяться в 2D.Алгоритм 2D уровня детализации (LOD)

Я уверен, что до натиска 3D-графики многие люди работали над 2D алгоритмами LOD. Любые подсказки или указатели на то, где я могу получить дополнительную информацию? Благодаря!

+1

Интересный, возможно, поиск упрощения формы, абстракция изображения или даже сжатие? Каковы требования к LOD? Как в изображении будет уменьшено изображение? Это для производительности, для экономии памяти или эмуляции глубины? – 2010-12-16 12:52:07

+0

Я смотрю на улучшение производительности существующего (устаревшего) алгоритма. По сути, я хочу разумную «сжатие-обертывание» аппроксимации многоугольника, где сохраняются основные внешние признаки и скрытые внутренние детали. +1 для предлагаемых ключевых слов. Благодаря! – tathagata 2010-12-17 10:39:25

ответ

4

Помимо очевидного тупого алгоритма, который должен был бы взять каждую N-ю вершину из многоугольника (уменьшая число вершин на N), вот идея, вдохновленная некоторыми 3D-алгоритмами.

Обычно в 3D требуется удалить лица, которые вносят свой вклад в общий объем. Для этого мы пытаемся упростить «самые плоские» области модели.

Сейчас в 2D, вы могли бы перевести это «упростить сегменты, которые имеют наименьший угол между ними первым наивным реализация может быть:.

  1. Compute все углы между сегментами Si и Si + 1 из многоугольник
  2. Возьмите все углы ниже заданного порога (или возьмите М наименьших углов)
  3. Упростите отрезки, идентифицированные в 2. (замените [Pi, Pi + 1] и [Pi + 1, Pi + 2 ] по [Pi, Pi + 2])
  4. Повторите с 1. до тех пор, пока мы не уменьшим наш полиг по

Конечно, это не оптимально, но это должно быть хорошая торговля между качеством и скоростью. Вместо того, чтобы угол, можно принять минимальное расстояние между средней точкой двух отрезков (Pi + 1) и потенциально упрощенного сегмента ([Pi, Pi + 2])

Edit:

Другой алгоритм I бы попробовать, если мне не нужно слишком много производительности:

  1. Рассмотрим исходные вершины многоугольника в качестве контрольных точек Catmull-Rom сплайнов
  2. Tesselate этот сплайн в желаемом количестве пунктов

Наконец, я нашел исходный код для вас по этой ссылке: http://motiondraw.com/md/as_samples/t/LineGeneralization/demo.html, а также связанные с ними алгоритмы: http://www.geom.unimelb.edu.au/gisweb/LGmodule/LGSimplification.htm

+0

Спасибо за предложения. Я думаю, что я смогу использовать комбинацию предложенных вами алгоритмов, и один предложил Джурай выше, чтобы достичь чего-то похожего на то, что я хочу. +1.К сожалению, я не могу отметить оба ответа как правильные, так что это правильно, но алгоритм «Дугласа-Пьюкера», предложенный Юраем, одинаково хорош. – tathagata 2010-12-17 10:47:08

4

Поиск Douglas-Peucker algorithm, которая используется для упрощения ломаных линий, но может быть расширена для поддержки многоугольники. Это то, что я использовал. Существуют также топологически стабильные расширения, если вам это нужно.

 Смежные вопросы

  • Нет связанных вопросов^_^