2013-08-27 2 views
3

связанный с этим вопрос:
An algorithm for inflating/deflating (offsetting, buffering) polygonsАлгоритм для надувания/сдувания (компенсируя, буферные) полилинии

Разница заключается в том, что я искал способ, чтобы раздуть данную полилинию в многоугольник:

polyline with a box around

Я получил следующий вход:

  • Список 2D точек, которые образуют ро lyline (ярко-зеленый в эскизе)
  • Ширина линии

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

Первоначально я думал, что могу использовать Boost::Geometry::buffer для этого, к сожалению, он просто кажется, что поддерживает коробки на данный момент. Было бы предложено решение с использованием Boost::Geometry или GDAL/OGR.

UPDATE:
Я решил использовать Clipper библиотеку и ее OffsetPolyLines функцию. Как только Boost Geometry будет выпущена с поддержкой Polyline-Buffer, я переключусь на Boost (поскольку все остальное работает с Boost в моем программном обеспечении).

+0

Как-то выглядит [Прямой скелет] (http://ru.wikipedia.org/) wiki/Straight_skeleton), но с обратным процессом. – Cyril

ответ

2

Я понимаю, что ОП предпочитал решение в Boost :: Geometry или GDAL/OGR, но в случае, если другие следуют за этим потоком, мой Clipper library также может сделать полилиния. (Скоро будет выпущен version 6, который уже находится в хранилище SourceForge, и упрощает его, и теперь он поддерживает обрезку открытого пути (полилиния).)

+0

Это решение, которое я буду использовать до тех пор, пока Boost не выпустит усовершенствованный алгоритм Buffer. На стороне: Clipper, похоже, не совместим с Windows, так как отсутствует declspec (dllexport). Я добавил, что все и все отлично работает с VC90 и VC100 в Windows 7. – MOnsDaR

+0

Я признаюсь, что я немного новичок в C++, но ISTM, что declspec (dllexport) не требуется, если вы скомпилируете источник непосредственно в свое приложение. Вы действительно предлагаете мне включить это во все функции заголовка? Кроме того, если вы только начинаете с Clipper, я настоятельно рекомендую использовать ver 6 (из репозитория SF), поскольку это основное обновление с особым упором на поддержку открытых путей (полилиний). –

+0

Да, я использую новейшую версию из SF и OffsetPolyLines отлично работает. Если вы хотите создать динамическую библиотеку (DLL) в Windows, вам необходимо использовать dllexport. Он не нужен для статических библиотек. На следующей неделе я пришлю вам патч. – MOnsDaR

2

Boost.Geometry расширение (от Trunk) можно сделать. Он еще не выпущен. Он может буферизировать вокруг полигонов, полигонов, точек и мультигеометрии. Вы можете указать острые углы (митра) или закругленные углы. Это еще не идеально, но линии, как ваш пример выше, не должны создавать никаких проблем.

В выпущенной версии (1.54) этого еще нет, а также следующего еще не будет. Так что теперь вам нужно использовать Trunk (от SVN)

+0

Создает ли он ласточкин хвосты с острыми углами или надежно зажимает их? – Michael

+0

@Barend Gehrels Знаете ли вы, что это еще не закончилось? –

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