Сегментация пространства на многоугольные области с приближением Ворони по набору точек

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

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

Мне было интересно, знает ли кто-нибудь, как лучше всего получить то, что я хочу, из диаграммы BOOST::voroni, или знает ли кто-нибудь более простую библиотеку, чем может получить то, что я ищу напрямую?

Вот код, показывающий, что я пытаюсь сделать,

voronoi_diagram< float > vd;
construct_voronoi( gridPointPos.begin(), gridPointPos.end(), &vd );

int index = 0;
for (voronoi_diagram<float>::const_cell_iterator it = vd.cells().begin();
    it != vd.cells().end(); ++it, ++index ) {

    // if the voroni cell has infinite edges,
        // then clip them to a finite length

    // extract the voroni vertices of this cell

    // create a boost polygon from the extracted edges
} 

Поскольку boost является слишком общим и сложным для моих нужд, я бы предпочел библиотеку или алгоритм, который просто делает все это, возвращая только наборы полигонов. Каковы мои варианты?


person MVTC    schedule 17.06.2015    source источник


Ответы (2)


Вы можете попробовать мою реализацию инкрементного алгоритма Бойера-Ватсона для триангуляции Делоне в PHP, он также находит диаграмму Вороного. Его можно загрузить с сайта codeplex.com (http://voronoi.codeplex.com/).

person Gigamegs    schedule 17.06.2015