matplotlib.tri
#
Unstrukturierte dreieckige Gitterfunktionen.
- Klasse matplotlib.tri. Triangulation ( x , y , Dreiecke = None , Maske = None ) [Quelle] #
Ein unstrukturiertes Dreiecksgitter, das aus nPunkten Punkten und ntri Dreiecken besteht. Die Dreiecke können entweder vom Benutzer vorgegeben oder automatisch mit einer Delaunay-Triangulation generiert werden.
- Parameter :
- x, y (npoints,) Array-artig
Koordinaten von Gitterpunkten.
- Dreiecke (ntri, 3) Array-ähnlich von int, optional
Für jedes Dreieck die Indizes der drei Punkte, aus denen das Dreieck besteht, gegen den Uhrzeigersinn geordnet. Wenn nicht angegeben, wird die Delaunay-Triangulation berechnet.
- mask (ntri,) Array-ähnlich von bool, optional
Welche Dreiecke werden ausgeblendet.
Anmerkungen
Damit eine Triangulation gültig ist, darf sie keine doppelten Punkte, aus kollinearen Punkten gebildete Dreiecke oder überlappende Dreiecke aufweisen.
- Attribute :
- Dreiecke (ntri, 3) Array von int
Für jedes Dreieck die Indizes der drei Punkte, aus denen das Dreieck besteht, gegen den Uhrzeigersinn geordnet. Wenn Sie die Maske berücksichtigen möchten , verwenden Sie
get_masked_triangles
stattdessen.- Maske (ntri, 3) Array von bool
Maskierte Dreiecke.
- is_delaunay bool
Ob die Triangulation eine berechnete Delaunay-Triangulation ist (wo Dreiecke nicht angegeben wurden) oder nicht.
- compute_plane_coefficients ( z ) [Quelle] #
Berechnen Sie die Koeffizienten der Ebenengleichung für alle unmaskierten Dreiecke aus den Punktkoordinaten (x, y) und dem angegebenen z-Array der Form (nPunkte). Das zurückgegebene Array hat die Form (npoints, 3) und ermöglicht die Berechnung des z-Werts an der Position (x, y) im Dreieck tri mit .
z = array[tri, 0] * x + array[tri, 1] * y + array[tri, 2]
- Grundstückskanten # _
Gibt ein ganzzahliges Form-Array (Kanten, 2) zurück, das alle Kanten von nicht maskierten Dreiecken enthält.
Jede Zeile definiert eine Kante durch ihren Startpunktindex und Endpunktindex. Jede Kante kommt nur einmal vor, dh für eine Kante zwischen den Punkten i und j gibt es nur entweder (i, j) oder (j, i) .
- get_cpp_triangulation ( ) [Quelle] #
Geben Sie das zugrunde liegende C++-Triangulationsobjekt zurück und erstellen Sie es bei Bedarf.
- static get_from_args_and_kwargs ( * args , ** kwargs ) [Quelle] #
Gibt ein Triangulationsobjekt aus den args und kwargs und den verbleibenden args und kwargs zurück, wobei die verbrauchten Werte entfernt wurden.
Es gibt zwei Alternativen: Entweder ist das erste Argument ein Triangulationsobjekt, in diesem Fall wird es zurückgegeben, oder die args und kwargs reichen aus, um eine neue Triangulation zur Rückgabe zu erstellen. Im letzteren Fall siehe Triangulation.__init__ für die möglichen args und kwargs.
- get_masked_triangles ( ) [Quelle] #
Gibt ein Array von Dreiecken zurück, wobei die Maske berücksichtigt wird.
- get_trifinder ( ) [Quelle] #
Geben Sie den Standard
matplotlib.tri.TriFinder
dieser Triangulation zurück und erstellen Sie sie, falls erforderlich. Dadurch kann dasselbe TriFinder-Objekt einfach geteilt werden.
- Grundstücksnachbarn # _
Gibt ein ganzzahliges Array der Form (ntri, 3) zurück, das benachbarte Dreiecke enthält.
Für jedes Dreieck die Indizes der drei Dreiecke, die dieselben Kanten teilen, oder -1, wenn es kein solches benachbartes Dreieck gibt. ist das Dreieck, das von Punktindex zu Punktindex der Nachbar der Kante ist .
neighbors[i, j]
triangles[i, j]
triangles[i, (j+1)%3]
- Klasse matplotlib.tri. TriContourSet ( ax , * args , ** kwargs ) [Quelle] #
Basen:
ContourSet
Erstellen und speichern Sie einen Satz Konturlinien oder gefüllte Bereiche für ein Dreiecksgitter.
Diese Klasse wird normalerweise nicht direkt vom Benutzer instanziiert, sondern von
tricontour
undtricontourf
.- Attribute :
- Axt
Axes
Das Axes-Objekt, in dem die Konturen gezeichnet werden.
- Sammlungen
silent_list
vonPathCollection
s Das
Artist
s repräsentiert die Kontur. Dies ist eine Liste vonPathCollection
s für Linien- und gefüllte Konturen.- Ebenen -Array
Die Werte der Höhenlinien.
- Schichten -Array
Gleich wie Ebenen für Linienkonturen; auf halbem Weg zwischen den Ebenen für gefüllte Konturen. Siehe
ContourSet._process_colors
.
- Axt
Zeichnet dreieckige Gitterkonturlinien oder gefüllte Bereiche, je nachdem, ob das Schlüsselwort arg Filled False (Standard) oder True ist.
Das erste Argument des Initialisierers muss ein
Axes
Objekt sein. Die restlichen Argumente und Schlüsselwortargumente sind im Docstring von beschriebentricontour
.
- Klasse matplotlib.tri. TriFinder ( Triangulation ) [Quelle] #
Abstrakte Basisklasse für Klassen, die verwendet werden, um die Dreiecke einer Triangulation zu finden, in denen (x, y) Punkte liegen.
Anstatt ein Objekt einer von TriFinder abgeleiteten Klasse zu instanziieren, ist es normalerweise besser, die Funktion zu verwenden
Triangulation.get_trifinder
.Abgeleitete Klassen implementieren __call__(x, y), wobei x und y Array-ähnliche Punktkoordinaten derselben Form sind.
- Klasse matplotlib.tri. TrapezoidMapTriFinder ( Triangulation ) [Quelle] #
Basen:
TriFinder
TriFinder
Klasse implementiert unter Verwendung des Trapezkartenalgorithmus aus dem Buch "Computational Geometry, Algorithms and Applications", zweite Auflage, von M. de Berg, M. van Kreveld, M. Overmars und O. Schwarzkopf.Die Triangulation muss gültig sein, dh sie darf keine doppelten Punkte, aus kollinearen Punkten gebildete Dreiecke oder überlappende Dreiecke enthalten. Der Algorithmus hat eine gewisse Toleranz gegenüber Dreiecken, die aus kollinearen Punkten gebildet werden, aber darauf sollte man sich nicht verlassen.
- Klasse matplotlib.tri. TriInterpolator ( triangulation , z , trifinder = None ) [Quelle] #
Abstrakte Basisklasse für Klassen, die zum Interpolieren auf einem Dreiecksgitter verwendet werden.
Abgeleitete Klassen implementieren die folgenden Methoden:
__call__(x, y)
, wobei x, y Array-ähnliche Punktkoordinaten derselben Form sind, und die ein maskiertes Array derselben Form zurückgibt, das die interpolierten Z-Werte enthält.gradient(x, y)
, wobei x, y Array-ähnliche Punktkoordinaten derselben Form sind, und die eine Liste von 2 maskierten Arrays derselben Form zurückgibt, die die 2 Ableitungen des Interpolators enthalten (Ableitungen von interpolierten z-Werten in Bezug auf x und y).
- Klasse matplotlib.tri. LinearTriInterpolator ( triangulation , z , trifinder = None ) [Quelle] #
Basen:
TriInterpolator
Linearer Interpolator auf einem Dreiecksgitter.
Jedes Dreieck wird durch eine Ebene dargestellt, so dass ein interpolierter Wert am Punkt (x, y) auf der Ebene des Dreiecks liegt, das (x, y) enthält. Interpolierte Werte sind daher über die Triangulation kontinuierlich, aber ihre ersten Ableitungen sind an Kanten zwischen Dreiecken diskontinuierlich.
- Parameter :
- Triangulation
Triangulation
Die Triangulation, über die interpoliert werden soll.
- z (npoints,) Array-ähnlich
Array von Werten, definiert an Rasterpunkten, zwischen denen interpoliert werden soll.
- Trifinder
TriFinder
, optional Wenn dies nicht angegeben ist, wird der Standard-TriFinder der Triangulation verwendet, indem aufgerufen wird
Triangulation.get_trifinder
.
- Triangulation
Methoden
`__ruf__` (x, y)
(Gibt interpolierte Werte an (x, y) Punkten zurück.)
`Steigung` (x, y)
(Gibt interpolierte Ableitungen an (x, y) Punkten zurück.)
- Farbverlauf ( x , y ) [Quelle] #
Gibt eine Liste von 2 maskierten Arrays zurück, die interpolierte Ableitungen an den angegebenen (x, y)-Punkten enthalten.
- Parameter :
- x, y -Array-ähnlich
x- und y-Koordinaten derselben Form und einer beliebigen Anzahl von Dimensionen.
- Rückgaben :
- dzdx, dzdy np.ma.array
2 maskierte Arrays der gleichen Form wie x und y ; Werte, die (x, y)-Punkten außerhalb der Triangulation entsprechen, werden ausgeblendet. Das erste zurückgegebene Array enthält die Werte von \(\frac{\partial z}{\partial x}\)und die zweite die von \(\frac{\partial z}{\partial y}\).
- Klasse matplotlib.tri. CubicTriInterpolator ( triangulation , z , kind = 'min_E' , trifinder = None , dz = None ) [Quelle] #
Basen:
TriInterpolator
Kubischer Interpolator auf einem Dreiecksgitter.
In einer Dimension – auf einem Segment – wird eine kubische Interpolationsfunktion durch die Werte der Funktion und ihre Ableitung an beiden Enden definiert. Dies ist in 2D innerhalb eines Dreiecks fast dasselbe, außer dass die Werte der Funktion und ihrer 2 Ableitungen an jedem Dreiecksknoten definiert werden müssen.
Der CubicTriInterpolator nimmt den Wert der Funktion an jedem Knoten - vom Benutzer bereitgestellt - und berechnet intern den Wert der Ableitungen, was zu einer glatten Interpolation führt. (Als Besonderheit kann der Benutzer den Wert der Derivate auch jedem Knoten auferlegen, aber dies soll nicht die übliche Verwendung sein.)
- Parameter :
- Triangulation
Triangulation
Die Triangulation, über die interpoliert werden soll.
- z (npoints,) Array-ähnlich
Array von Werten, definiert an Rasterpunkten, zwischen denen interpoliert werden soll.
- kind {'min_E', 'geom', 'user'}, optional
Wahl des Glättungsalgorithmus, um die Interpolantenableitungen zu berechnen (Voreinstellung 'min_E'):
if 'min_E': (Standard) Die Ableitungen an jedem Knoten werden berechnet, um eine Biegeenergie zu minimieren.
if 'geom': Die Ableitungen an jedem Knoten werden als gewichteter Durchschnitt relevanter Dreiecksnormalen berechnet. Zur Geschwindigkeitsoptimierung (große Netze) zu verwenden.
if 'user': Der Benutzer liefert das Argument dz , daher ist keine Berechnung erforderlich.
- Trifinder
TriFinder
, optional Wenn nicht angegeben, wird der Standard-TriFinder der Triangulation beim Aufruf von verwendet
Triangulation.get_trifinder
.- dz Tupel von Array-Likes (dzdx, dzdy), optional
Wird nur verwendet, wenn kind ='user'. In diesem Fall muss dz als (dzdx, dzdy) bereitgestellt werden, wobei dzdx, dzdy Arrays der gleichen Form wie z sind und die interpolierenden ersten Ableitungen an den Triangulationspunkten sind.
- Triangulation
Anmerkungen
Dieser Hinweis ist etwas technisch und beschreibt, wie die kubische Interpolation berechnet wird.
Die Interpolation basiert auf einem Clough-Tocher-Unterteilungsschema des Triangulationsnetzes (zur Verdeutlichung wird jedes Dreieck des Gitters in 3 untergeordnete Dreiecke unterteilt, und auf jedem untergeordneten Dreieck ist die interpolierte Funktion ein kubisches Polynom der 2 Koordinaten). Diese Technik stammt aus der FEM-Analyse (Finite-Elemente-Methode); das verwendete Element ist ein reduziertes Hsieh-Clough-Tocher (HCT)-Element. Seine Formfunktionen sind in [1] beschrieben . Die zusammengesetzte Funktion ist garantiert C1-glatt, dh sie ist stetig und ihre ersten Ableitungen sind auch stetig (dies ist innerhalb der Dreiecke leicht zu zeigen, gilt aber auch beim Überqueren der Kanten).
Im Standardfall ( kind = 'min_E') minimiert der Interpolant eine Krümmungsenergie auf dem Funktionsraum, der von den Formfunktionen der HCT-Elemente erzeugt wird – mit auferlegten Werten, aber willkürlichen Ableitungen an jedem Knoten. Das minimierte Funktional ist das Integral der sogenannten Gesamtkrümmung (Implementierung basierend auf einem Algorithmus aus [2] - PCG Sparse Solver):
\[E(z) = \frac{1}{2} \int_{\Omega} \left( \left( \frac{\partial^2{z}}{\partial{x}^2} \right)^2 + \left( \frac{\partial^2{z}}{\partial{y}^2} \right)^2 + 2\left( \frac{\partial^2{z}}{\partial{y}\partial{x}} \right)^2 \right) dx\,dy\]Wenn der Fall kind ='geom' vom Benutzer gewählt wird, wird eine einfache geometrische Näherung verwendet (gewichteter Durchschnitt der Dreiecksnormalenvektoren), was die Geschwindigkeit auf sehr großen Gittern verbessern könnte.
Verweise
[ 1 ]Michel Bernadou, Kamal Hassan, "Basisfunktionen für allgemeine Hsieh-Clough-Tocher-Dreiecke, vollständig oder reduziert.", International Journal for Numerical Methods in Engineering, 17(5):784 - 789. 2.01.
[ 2 ]CT Kelley, "Iterative Methoden zur Optimierung".
Methoden
`__ruf__` (x, y)
(Gibt interpolierte Werte an (x, y) Punkten zurück.)
`Steigung` (x, y)
(Gibt interpolierte Ableitungen an (x, y) Punkten zurück.)
- Farbverlauf ( x , y ) [Quelle] #
Gibt eine Liste von 2 maskierten Arrays zurück, die interpolierte Ableitungen an den angegebenen (x, y)-Punkten enthalten.
- Parameter :
- x, y -Array-ähnlich
x- und y-Koordinaten derselben Form und einer beliebigen Anzahl von Dimensionen.
- Rückgaben :
- dzdx, dzdy np.ma.array
2 maskierte Arrays der gleichen Form wie x und y ; Werte, die (x, y)-Punkten außerhalb der Triangulation entsprechen, werden ausgeblendet. Das erste zurückgegebene Array enthält die Werte von \(\frac{\partial z}{\partial x}\)und die zweite die von \(\frac{\partial z}{\partial y}\).
- Klasse matplotlib.tri. TriRefiner ( Triangulation ) [Quelle] #
Abstrakte Basisklasse für Klassen, die eine Netzverfeinerung implementieren.
Ein TriRefiner kapselt ein Triangulationsobjekt und stellt Werkzeuge für die Netzverfeinerung und Interpolation bereit.
Abgeleitete Klassen müssen Folgendes implementieren:
refine_triangulation(return_tri_index=False, **kwargs)
, wobei die optionalen Schlüsselwortargumente kwargs in jeder konkreten TriRefiner-Implementierung definiert sind und Folgendes zurückgeben:eine raffinierte Triangulation,
optional (abhängig von return_tri_index ) für jeden Punkt der verfeinerten Triangulation: der Index des anfänglichen Triangulationsdreiecks, zu dem er gehört.
refine_field(z, triinterpolator=None, **kwargs)
, wo:z Array von Feldwerten (zu verfeinern), die an den Basistriangulationsknoten definiert sind,
Triinterpolator ist ein optionales
TriInterpolator
,die anderen optionalen Schlüsselwortargumente kwargs werden in jeder konkreten Implementierung von TriRefiner definiert;
und die (als Tupel) ein verfeinertes Dreiecksnetz und die interpolierten Werte des Felds an den verfeinerten Triangulationsknoten zurückgibt.
- Klasse matplotlib.tri. UniformTriRefiner ( Triangulation ) [Quelle] #
Basen:
TriRefiner
Gleichmäßige Netzverfeinerung durch rekursive Unterteilungen.
- Parameter :
- Triangulation
Triangulation
Die gekapselte Triangulation (zu verfeinern)
- Triangulation
- Refine_field ( z , triinterpolator = None , subdiv = 3 ) [Quelle] #
Verfeinern Sie ein Feld, das in der gekapselten Triangulation definiert ist.
- Parameter :
- z (npoints,) Array-ähnlich
Werte des zu verfeinernden Felds, definiert an den Knoten der gekapselten Triangulation. (
n_points
ist die Anzahl der Punkte in der anfänglichen Triangulation)- Triinterpolator
TriInterpolator
, optional Interpolator für Halbbildinterpolation. Wenn nicht angegeben,
CubicTriInterpolator
wird a verwendet.- subdiv int, Standard: 3
Rekursionsebene für die Unterteilung. Jedes Dreieck ist in
4**subdiv
untergeordnete Dreiecke unterteilt.
- Rückgaben :
- refi_tri
Triangulation
Die zurückgegebene verfeinerte Triangulation.
- refi_z 1D-Array der Länge: Anzahl der refi_tri -Knoten.
Das zurückgegebene interpolierte Feld (bei refi_tri- Knoten).
- refi_tri
- verfeinern_triangulation ( return_tri_index = False , subdiv = 3 ) [Quelle] #
Berechnen Sie eine gleichmäßig verfeinerte Triangulation refi_triangulation der gekapselten
triangulation
.Diese Funktion verfeinert die gekapselte Triangulation, indem sie jedes Vaterdreieck in 4 Kind-Unterdreiecke aufteilt, die auf den Kantenmittenknoten aufgebaut sind, wobei die Subdiv- Zeiten rekursiv sind. Am Ende wird also jedes Dreieck in Kinddreiecke aufgeteilt
4**subdiv
.- Parameter :
- return_tri_index bool, Standard: False
Ob eine Indextabelle zurückgegeben wird, die den Vaterdreiecksindex jedes Punkts angibt.
- subdiv int, Standard: 3
Rekursionsebene für die Unterteilung. Jedes Dreieck ist in
4**subdiv
untergeordnete Dreiecke unterteilt; daher führt die Standardeinstellung zu 64 verfeinerten Teildreiecken für jedes Dreieck der anfänglichen Triangulation.
- Rückgaben :
- refi_triangulation
Triangulation
Die raffinierte Triangulation.
- found_index int-Array
Index der anfänglichen Triangulation, die das Dreieck enthält, für jeden Punkt der refi_triangulation . Wird nur zurückgegeben, wenn return_tri_index auf True gesetzt ist.
- refi_triangulation
- Klasse matplotlib.tri. TriAnalyzer ( Triangulation ) [Quelle] #
Definieren Sie grundlegende Werkzeuge für die Analyse und Verbesserung von Dreiecksnetzen.
Ein TriAnalyzer kapselt ein
Triangulation
Objekt und stellt grundlegende Werkzeuge für die Netzanalyse und Netzverbesserung bereit.- Parameter :
- Triangulation
Triangulation
Die zu analysierende gekapselte Triangulation.
- Triangulation
- Attribute :
scale_factors
Faktoren zum Umskalieren der Triangulation in ein Einheitsquadrat.
- circle_ratios ( rescale = True ) [Quelle] #
Gibt ein Maß für die Ebenheit der Triangulationsdreiecke zurück.
Das Verhältnis des Inkreisradius zum Umkreisradius ist ein weit verbreiteter Indikator für die Ebenheit eines Dreiecks. Es ist immer und nur für gleichseitige Dreiecke. Kreisverhältnisse unter 0,01 bezeichnen sehr flache Dreiecke.
<= 0.5
== 0.5
Um unangemessen niedrige Werte aufgrund eines Maßstabsunterschieds zwischen den beiden Achsen zu vermeiden, kann das Dreiecksnetz zuerst so skaliert werden, dass es in ein Einheitsquadrat passt
scale_factors
(Nur wenn Neuskalierung True ist, was der Standardwert ist).- Parameter :
- rescale bool, Standard: True
Wenn True, interne Neuskalierung (basierend auf
scale_factors
), sodass die (unmaskierten) Dreiecke genau in ein Einheitsquadratnetz passen.
- Rückgaben :
- maskiertes Array
Verhältnis des Inkreisradius zum Umkreisradius, für jedes „umskalierte“ Dreieck der gekapselten Triangulation. Werte, die maskierten Dreiecken entsprechen, werden maskiert.
- get_flat_tri_mask ( min_circle_ratio = 0.01 , rescale = True ) [Quelle] #
Beseitigen Sie zu flache Grenzdreiecke aus der Triangulation.
Gibt eine Maske new_mask zurück , die es ermöglicht, die eingekapselte Triangulation von ihren randständigen flachen Dreiecken (entsprechend ihrer
circle_ratios()
) zu bereinigen. Diese Maske soll später mit auf die Triangulation angewendet werdenTriangulation.set_mask
. new_mask ist eine Erweiterung der anfänglichen Triangulationsmaske in dem Sinne, dass ein anfänglich maskiertes Dreieck maskiert bleibt.Das Array new_mask wird rekursiv berechnet; Bei jedem Schritt werden flache Dreiecke nur dann entfernt, wenn sie eine Seite mit der aktuellen Mesh-Grenze teilen. Somit werden keine neuen Löcher in der triangulierten Domäne erzeugt.
- Parameter :
- min_circle_ratio Float, Standard: 0,01
Randdreiecke mit Inkreis/Kreiskreis-Radienverhältnis r/R werden entfernt, wenn r/R < min_circle_ratio .
- rescale bool, Standard: True
Wenn True, zuerst intern neu skalieren (basierend auf
scale_factors
), so dass die (unmaskierten) Dreiecke genau in ein Einheitsquadratnetz passen. Diese Neuskalierung berücksichtigt den Skalenunterschied, der zwischen den beiden Achsen bestehen könnte.
- Rückgaben :
- Array von bool
Maske zum Anwenden auf gekapselte Triangulation. Alle ursprünglich maskierten Dreiecke bleiben in new_mask maskiert .
Anmerkungen
Der Grundgedanke hinter dieser Funktion ist, dass eine Delaunay-Triangulation – einer unstrukturierten Menge von Punkten – manchmal fast flache Dreiecke an ihrer Grenze enthält, was zu Artefakten in Diagrammen führt (insbesondere bei hochauflösender Konturierung). Mit der berechneten new_mask maskiert , würde die eingekapselte Triangulation keine unmaskierten Grenzdreiecke mit einem Kreisverhältnis unterhalb von min_circle_ratio enthalten , wodurch die Netzqualität für nachfolgende Plots oder Interpolation verbessert wird.
- Eigenschaft scale_factors #
Faktoren zum Umskalieren der Triangulation in ein Einheitsquadrat.
- Rückgaben :
- (schweben, schweben)
Skalierungsfaktoren (kx, ky), damit die Triangulation genau in ein Einheitsquadrat passt.
[triangulation.x * kx, triangulation.y * ky]