2011-07-01 22 views
6

Tengo un conjunto de polígonos y quiero probar la intersección entre este y un segmento. Revisé el manual pero no puedo encontrar una función que coincida. La intersección entre puntos, líneas, segmentos, triángulos, planos existe. Y la intersección entre los polígonos también está allí. Mi pregunta es:CGAL: ¿intersección entre un segmento y un polígono?

  1. ¿Existe tal función?
  2. Si no, ¿significa que necesito descomponer los polígonos en segmentos y hacer la intersección entre estos segmentos? (La razón por la que soy reacio a hacer esto es porque, de hecho, pensé que CGAL podría usar esta forma para hacer intersecciones entre polígonos. ¿Cómo es que no existe tal función para intersecar una línea y un polígono?) ¿O hay alguna otra mejor? forma de hacerlo?

Respuesta

7

El método más fácil es crear un objeto Polygon_set_2 que puede contener varios polígonos. Para probar una intersección de un polígono externo con este conjunto, simplemente aplica el método do_intersect.

Por ejemplo:

typedef CGAL::Polygon_set_2<Kernel, std::vector<Kernel::Point_2>> Polygon_set_2; 
Polygon_set_2 ps; 
Polygon_2  poly; 
Polygon_2  line; // line is a polygon defined by 2 points 

ps.insert(poly); 
bool intersect = ps.do_intersect(line); 

Más sobre polygon_set_2:

espero que sea clara, Kiril

+0

Oh, no me di cuenta de que un polígono puede contener solo dos puntos. Parece que funciona! –

+1

es ps.insert (poly); ps.insert (línea); ? – sabbir

+0

Recibo este error: Explicación: El límite del polígono se solapa. – sabbir

Cuestiones relacionadas