2011-07-01 12 views
6

Mam zestaw wielokątów i chcę przetestować skrzyżowanie między nim a segmentem. Sprawdziłem instrukcję, ale nie mogę znaleźć pasującej funkcji. Istnieje przecięcie punktów, linii, segmentów, trójkątów, płaszczyzn. Jest tam również przecięcie wielokątów. Moje pytanie brzmi:CGAL: Przecięcie między segmentem a wielokątem?

  1. Czy istnieje taka funkcja?
  2. Jeśli nie, to znaczy, że muszę rozbić wielokąty na segmenty i zrobić przecięcie między tymi segmentami? (Powodem, dla którego nie mam na to ochoty, jest to, że CGAL może faktycznie użyć w ten sposób do przecięcia wieloboków, dlaczego nie ma takiej funkcji do przecinania linii i wielokąta?) Czy jest jakiś inny lepszy sposób? sposób to zrobić?

Odpowiedz

7

Najprostszą metodą jest utworzenie obiektu Polygon_set_2, który może zawierać kilka wielokątów. Aby przetestować przecięcie zewnętrznego wielokąta z tym zestawem, wystarczy zastosować metodę do_intersect.

Na przykład:

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); 

Więcej na polygon_set_2:

Mam nadzieję, że to jasne, Kiril

+0

Och, nie zdawałem sobie sprawy, że wielokąt może zawierać tylko dwa punkty. Wydaje się, że działa! –

+1

jest to ps.insert (poli); ps.insert (linia); ? – sabbir

+0

Otrzymuję ten błąd: Objaśnienie: Granica wieloboków nakłada się na siebie. – sabbir