2016-11-04 2 views
0

J'ai besoin de trouver l'axe médian d'un polygone concave avec des trous. J'utilise CGAL. Mon approche actuelle est:Comment puis-je extraire les arêtes d'un graphe delaunay de segment dans CGAL?

  1. Construire le 2D segment delaunay graph du polygone
  2. Extrait les segments de sortie résultantes (médiatrices)
  3. test chaque segment pour trouver si elle est à l'intérieur du polygone
  4. L'ensemble des segments résultant former l'axe médian du polygone

Je peux construire le SDG, et les bords d'essai devrait être droit, mais je me bats pour extraire les bords de la SDG, ou correspondin g graphique Voronoi plutôt. Il devrait y avoir quelques types d'arêtes auxquelles je m'attendrais: des points, des lignes et des paraboles.

Comment faire? Suis-je même sur la bonne voie?

Aussi je sais que je peux parcourir les bords du graphe en utilisant l'une des méthodes fournies et je comprends que cela retourne la face et le sommet opposé au bord. Mais comment l'utiliser pour obtenir, par exemple, les extrémités d'une ligne bissectrice?

Répondre

1

Vous pouvez utiliser les fonctions draw_dual() ou draw_skeleton(). L'arc parabole sera approximé par segments. Vous pouvez regarder l'implémentation de la méthode si vous avez besoin de plus de contrôle sur la sortie.

Vous pouvez utiliser cette classe pour la collecte d'objets:

struct Collector 
{ 
    std::vector<Ray_2> rays; 
    std::vector<Line_2> lines; 
    std::vector<Segment_2> segs; 

    void operator<<(const Ray_2& p){rays.push_back(p);} 
    void operator<<(const Line_2& p){lines.push_back(p);} 
    void operator<<(const Segment_2& p){segs.push_back(p);} 
}; 
+0

C'est exactement ce que je avais besoin. Je vous remercie. – Frank