Matplotlib, Vermeidung unerwünschter Dreiecke in plot_trisurf ()

8

Ich habe den folgenden Code, um einen Kegel zu erstellen, für den später ein Verschiebungsfeld angewendet wird. In der Abbildung unten sehen Sie, dass einige große Dreiecke oben, aber nicht unten gezeichnet sind. Ich glaube, es gibt einen internen, versteckten Parameter, der plot_trisurf() angibt, bis zu welcher Entfernung die Dreiecke erstellt werden sollen, ansonsten sollten sie auch unten erstellt worden sein.

%Vor%

    
Saullo Castro 30.04.2013, 13:12
quelle

1 Antwort

4

Sie haben wahrscheinlich schon selbst weitergemacht oder das gelöst, aber ich dachte, ich würde eine Antwort für zukünftige Besucher schmeißen.

Der Grund, warum Sie Dreiecke im kleineren Kreis bekommen, ist keine Sache mit maximaler Entfernung, weil diese Dreiecke in der konvexen Hülle Ihrer Punktprojektion auf der x, y-Ebene enthalten sind.

Wenn Sie sich die Quelle plot_trisurf ansehen, ( numpy.source(Axes3D.plot_trisurf) ), sehen Sie, dass sie jedes Mal Delaunay-Triangulation durchführt und es keine Möglichkeit gibt, Ihre Dreiecke zu definieren oder unerwünschte Dreiecke auszuschließen.

Zwei Optionen:

der richtige Weg # 1

Kopieren Sie die Quelle von plot_trisurf zu Ihrer Skript und fügen Sie die Zeile tri.set_mask(...) hinzu (tri ist a matplotlib.tri.triangulation.Triangulation instance) mit dem Algorithmus Ihrer Wahl (einige maximale Kantenlänge Kriterien oder finden Sie Dreiecke, die Schwerpunkte innerhalb eines Radius .. was auch immer Ihre tatsächlichen Daten passt), um die boolesche Maske nach der Triangulation ist fertig.

der richtige Weg # 2

Definieren Sie die Dreiecke ohne Delaunay-Triangluation mit Triangulation(x,y,triangles=...)

der schnelle Weg

setze plot_trisurf vmax etwas unterhalb der Ebene des Kreises.

* Ich habe keine dieser Optionen versucht

    
Paul 14.05.2013 03:44
quelle

Tags und Links