2017-12-16 3 views
0

Ich habe eine Reihe von Punkten im 3D-Raum. Bei einem maximalen Fehler von 10^-5 kann ich eine Ebene durch sie legen (Fehler ist der Abstand von Punkt zu Ebene).Dreiecksmenge von Punkten auf beliebiger Ebene im 3D-Raum

Gibt es eine Möglichkeit, diese Punkte auf dieser beliebigen Ebene zu triangulieren? Ich habe versucht Bowyer-Watson, aber das funktioniert nur, wenn der Fehler 0 ist. Alles andere und es wird nicht triangulieren oder ich werde nicht eine gute Triangulation (überlappende Dreiecke) bekommen.

Bearbeiten

Ich glaube, ich habe das Problem gefunden. Bei bestimmten Winkeln funktioniert der Bowyer-Watson-Algorithmus nicht, weil meine Berechnung des Umkreismittelpunkts ausgeschaltet ist. Wie kann ich den Umkreis eines Dreiecks in 3D berechnen?

Antwort

0

Da ich die Punkte in der Ebene kenne, kann ich einen Vektor berechnen. Dieser Vektor liegt auf der Ebene. Als nächstes berechne ich den Schwerpunkt der Punkte.

den Vektor und Massenmittel ich mit einem großen Dreieck auf der Ebene erstellen können

 Vertex p1 = new Vertex(dir * 3000 + center); 
     Vertex p2 = new Vertex(Quaternion.AngleAxis(120, plane.normal) * dir * 3000 + center); 
     Vertex p3 = new Vertex(Quaternion.AngleAxis(240, plane.normal) * dir * 3000 + center); 

Nun, da ich die einschließenden Dreiecks haben kann ich nur Bowyer-Watson verwenden. Für circumcenter in 3D-i verwenden:

Vector3 ac = p3 - p1; 
    Vector3 ab = p2 - p1; 
    Vector3 abXac = Vector3.Cross(ab, ac); 

    circumceter = p1 + (Vector3.Cross(abXac, ab) * ac.sqrMagnitude + Vector3.Cross(ac, abXac) * ab.sqrMagnitude)/(2 * abXac.sqrMagnitude); 

Und ich habe jetzt eine triangulierte Menge von Punkten auf einer beliebigen Ebene in 3D.

Verwandte Themen