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.
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:
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.
Definieren Sie die Dreiecke ohne Delaunay-Triangluation mit Triangulation(x,y,triangles=...)
setze plot_trisurf vmax
etwas unterhalb der Ebene des Kreises.
* Ich habe keine dieser Optionen versucht
Tags und Links python matplotlib numpy