2015-04-22 2 views
2

Оцените, можете ли вы помочь мне с alpha_shape_2. Я новый с CGAL.CGAL Alpha_shape_2 извлекает граничные вершины

Я пытаюсь извлечь границы из 2D-данных.

Alpha_shape_2 alpha(lp.begin(), lp.end(), FT(1000), Alpha_shape_2::GENERAL); 

Alpha_shape_2 call работает отлично. Но я смущен тем, как извлекать только граничные вершины.

Очень ценный пример.

+0

Что вы называете граничными вершинами? – sloriot

ответ

0

Вот как получить очки, но они не сортируются:

std::vector<Point> result; 

for(Alpha_shape_2::Alpha_shape_vertices_iterator it = alpha_shape.Alpha_shape_vertices_begin(); 
    it != alpha_shape.Alpha_shape_vertices_end(); 
    ++it){ 

    Alpha_shape_2::Vertex_handle handle = *it; 
    Point p = handle->point(); 
    result.push_back(p); 
} 

Вы должны начать прочитать manual on official website понять некоторые понятия. Простые примеры в CGAL не имеют такого объяснения и функциональности. Вам нужно больше узнать о реальной структуре CGAL.

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

for(Alpha_shape_2::Alpha_shape_edges_iterator it = alpha_shape.Alpha_shape_edges_begin(); 
    it != alpha_shape.alpha_shape_edges_end(); 
     ++it){ 

    CGAL::Kernel::Segment segment = alpha_shape.segment(*it); 

    Point p1 = segment.vertex(0); 
    Point p2 = segment.vertex(1); 
    // so here you will get p1 and p2 of segment, which is part of shape. 

    ..... 

} 

вы получите что-то вроде этого: enter image description here

То есть после моей функции сортировки (. Извините не могу разделить, но это не так сложно, чтобы написать): CGAL ALpha Shape 2D

UPDATE Я нашел this source, может быть, будет полезно.

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

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