CGAL Vertex_Handle



  • Hallo,

    kennt sich vlt jmd mit CGAL aus?

    Ich habe es angetestet um konvexe Hüllen Berechnungen inklusive Delaunay Triangulierungen durchzuführen.

    Der Aufbau ist wie folgt:

    typedef CGAL::Simple_cartesian<double> SK;
    typedef CGAL::Filtered_kernel<SK> FK;
    struct K : public FK {};
    
    typedef K::Point_3 Point_3;
    typedef CGAL::Triangulation_data_structure_3<My_vertex_base<K> > Tds;
    typedef CGAL::Delaunay_triangulation_3<K> Triangulation;
    typedef Triangulation::Vertex_handle Vertex_handle;
    
    Triangulation T;
    vector<K::Point_3> triFacePoints;
    T.insert(triFacePoints.begin(),triFacePoints.end());
    
    list<Vertex_handle> vertices; // vector to hold the points of the convex hull
    		T.incident_vertices(T.infinite_vertex(), back_inserter(vertices)); // get the points from Delaunay
    		std::cout << "This convex hull has "
    			<< vertices.size() << " points on it." << std::endl;
    

    Soweit klappt alles, nur frage ich mich jetzt wie ich auf die einzelnen Punkte über die Vertex_Handles zugreifen kann?

    Ich müsste nun noch weitere Berechnungen mit den Koordinaten der Punkte durchführen,es scheitert aber am Zugriff.

    Habe auch schon erfolglos die Doku nach Hinweisen durchstöbert.

    Wäre toll wenn jmd einen Rat hätte.



  • Bei Vertex_handle sind die Operatoren -> und * überladen, so dass du mit diesem Zugriff auf ein Vertex kommst. Die Vertex Klasse ist hier

    http://www.cgal.org/Manual/3.3/doc_html/cgal_manual/TriangulationDS_3_ref/Concept_TriangulationDataStructure_3--Vertex.html#Cross_link_anchor_988

    dokomentiert. Für deinen konkreten Fall wäre der Zugriff auf den ersten Punkt deiner Liste bespielsweise

    vertices.front()->point();
    


  • Vielen Dank.

    Hat mir sehr geholfen.

    Ich habe aber nun ein anderes Problem:
    Wie kann ich mit CGAL oder auch gerne ohne CGAL, Vertices zwischen zwei anderen Vertices detektieren, die in etwa, mit einer anzugebenen Schranke, denselben Winkel aufweisen?

    Es geht darum redundante Punkte aus meinem Netz zu entfernen und dafür bieten sich unter anderem Punkte zwischen zwei anderen Punkten an, die in etwa auf einer Geraden liegen.

    Die Vertices liegen mir als Vektor vor.

    Ich steh gerade ein bisschen auf dem Schlauch 😕



  • Update:
    Ich mein eine Möglichkeit gefunden zu haben aber leider weiß ich nicht wie ich es berechne.

    Wie berechne ich den Winkel an Vektor q der sich zwischen den Vektoren p und r befindet und mit diesen beiden Vektoren in Beziehung steht?


Anmelden zum Antworten