matplotlib.tri
#
Funzioni di griglia triangolare non strutturate.
- classe matplotlib.tri. Triangolazione ( x , y , triangoli = Nessuno , maschera = Nessuno ) [fonte] #
Una griglia triangolare non strutturata costituita da npunti punti e ntri triangoli. I triangoli possono essere specificati dall'utente o generati automaticamente utilizzando una triangolazione Delaunay.
- Parametri :
- x, y (npunti,) simile a un array
Coordinate dei punti della griglia.
- triangoli (ntri, 3) come array di int, facoltativo
Per ogni triangolo, gli indici dei tre punti che compongono il triangolo, ordinati in senso antiorario. Se non specificato, viene calcolata la triangolazione di Delaunay.
- mask (ntri,) tipo array di bool, facoltativo
Quali triangoli sono mascherati.
Appunti
Perché una Triangolazione sia valida non deve avere punti duplicati, triangoli formati da punti colineari o triangoli sovrapposti.
- Attributi :
- triangoli (ntri, 3) matrice di int
Per ogni triangolo, gli indici dei tre punti che compongono il triangolo, ordinati in senso antiorario. Se vuoi prendere in considerazione la maschera , usa
get_masked_triangles
invece.- mask (ntri, 3) matrice di bool
Triangoli mascherati.
- is_delaunay bool
Se la triangolazione è una triangolazione di Delaunay calcolata (dove i triangoli non sono stati specificati) o meno.
- calcola_piano_coefficienti ( z ) [fonte] #
Calcola i coefficienti dell'equazione del piano per tutti i triangoli non mascherati dalle coordinate del punto (x, y) e dalla matrice z specificata della forma (npunti). L'array restituito ha una forma (npunti, 3) e consente di calcolare il valore z nella posizione (x, y) nel triangolo tri utilizzando .
z = array[tri, 0] * x + array[tri, 1] * y + array[tri, 2]
- margini di proprietà #
Restituisce un array intero di forma (nedges, 2) contenente tutti i bordi dei triangoli non mascherati.
Ogni riga definisce un bordo in base all'indice del punto iniziale e all'indice del punto finale. Ogni bordo appare solo una volta, cioè per un bordo tra i punti i e j , ci sarà solo (i, j) o (j, i) .
- get_cpp_triangulation ( ) [fonte] #
Restituisce l'oggetto Triangolazione C++ sottostante, creandolo se necessario.
- static get_from_args_and_kwargs ( * args , ** kwargs ) [fonte] #
Restituisce un oggetto Triangulation da args e kwargs e dai rimanenti args e kwargs con i valori consumati rimossi.
Esistono due alternative: o il primo argomento è un oggetto Triangulation, nel qual caso viene restituito, oppure args e kwargs sono sufficienti per creare una nuova Triangulation da restituire. In quest'ultimo caso, vedere Triangulation.__init__ per i possibili args e kwargs.
- get_masked_triangoli ( ) [fonte] #
Restituisce una matrice di triangoli tenendo conto della maschera.
- get_trifinder ( ) [fonte] #
Restituisce il default
matplotlib.tri.TriFinder
di questa triangolazione, creandola se necessario. Ciò consente di condividere facilmente lo stesso oggetto TriFinder.
- vicini di proprietà #
Restituisce un array intero di forma (ntri, 3) contenente triangoli adiacenti.
Per ogni triangolo, gli indici dei tre triangoli che condividono gli stessi bordi, o -1 se non esiste un tale triangolo vicino. è il triangolo che è il vicino al bordo dal punto indice al punto indice .
neighbors[i, j]
triangles[i, j]
triangles[i, (j+1)%3]
- classe matplotlib.tri. TriContourSet ( ax , * args , ** kwargs ) [fonte] #
Basi:
ContourSet
Crea e memorizza una serie di linee di contorno o campiture per una griglia triangolare.
Questa classe in genere non viene istanziata direttamente dall'utente ma da
tricontour
etricontourf
.- Attributi :
- ascia
Axes
L'oggetto Axes in cui vengono disegnati i contorni.
- collezioni
silent_list
diPathCollection
s La
Artist
s che rappresenta il contorno. Questo è un elenco diPathCollection
s sia per linee che per contorni riempiti.- matrice di livelli
I valori dei livelli di contorno.
- matrice di strati
Uguale ai livelli per i contorni delle linee; a metà strada tra i livelli per i contorni riempiti. Vedi
ContourSet._process_colors
.
- ascia
Disegna le linee di contorno della griglia triangolare o le aree piene, a seconda che la parola chiave arg filled sia False (predefinito) o True.
Il primo argomento dell'inizializzatore deve essere un
Axes
oggetto. Gli argomenti rimanenti e gli argomenti delle parole chiave sono descritti nella docstring ditricontour
.
- classe matplotlib.tri. TriFinder ( triangolazione ) [fonte] #
Classe base astratta per le classi utilizzate per trovare i triangoli di una triangolazione in cui giacciono (x, y) punti.
Piuttosto che istanziare un oggetto di una classe derivata da TriFinder, di solito è meglio usare la funzione
Triangulation.get_trifinder
.Le classi derivate implementano __call__(x, y) dove x e y sono coordinate di punti simili a matrici della stessa forma.
- classe matplotlib.tri. TrapezoidMapTriFinder ( triangolazione ) [fonte] #
Basi:
TriFinder
TriFinder
classe implementata utilizzando l'algoritmo trapezoidale tratto dal libro "Computational Geometry, Algorithms and Applications", seconda edizione, di M. de Berg, M. van Kreveld, M. Overmars e O. Schwarzkopf.La triangolazione deve essere valida, cioè non deve avere punti duplicati, triangoli formati da punti colineari o triangoli sovrapposti. L'algoritmo ha una certa tolleranza per i triangoli formati da punti colineari, ma su questo non si dovrebbe fare affidamento.
- classe matplotlib.tri. TriInterpolator ( triangolazione , z , trifinder = None ) [fonte] #
Classe base astratta per le classi utilizzate per l'interpolazione su una griglia triangolare.
Le classi derivate implementano i seguenti metodi:
__call__(x, y)
, dove x, y sono coordinate di punti simili a matrici della stessa forma e che restituisce una matrice mascherata della stessa forma contenente i valori z interpolati.gradient(x, y)
, dove x, y sono coordinate di punti di tipo array della stessa forma e che restituisce un elenco di 2 array mascherati della stessa forma contenente le 2 derivate dell'interpolatore (derivate dei valori z interpolati rispetto a x e y).
- classe matplotlib.tri. LinearTriInterpolator ( triangolazione , z , trifinder = None ) [fonte] #
Basi:
TriInterpolator
Interpolatore lineare su una griglia triangolare.
Ogni triangolo è rappresentato da un piano in modo che un valore interpolato nel punto (x, y) giaccia sul piano del triangolo contenente (x, y). I valori interpolati sono quindi continui attraverso la triangolazione, ma le loro derivate prime sono discontinue ai bordi tra triangoli.
- Parametri :
- triangolazione
Triangulation
La triangolazione su cui eseguire l'interpolazione.
- z (npoints,) simile a un array
Matrice di valori, definita nei punti della griglia, tra cui interpolare.
- trifinder
TriFinder
, opzionale Se questo non è specificato, verrà utilizzato il TriFinder predefinito di Triangulation chiamando
Triangulation.get_trifinder
.
- triangolazione
Metodi
`__chiama__` (x, y)
(Restituisce i valori interpolati nei punti (x, y).)
`gradiente` (x, y)
(Restituisce le derivate interpolate nei punti (x, y).)
- gradiente ( x , y ) [fonte] #
Restituisce un elenco di 2 matrici mascherate contenenti derivate interpolate nei punti (x, y) specificati.
- Parametri :
- x, y simile a un array
coordinate x e y della stessa forma e qualsiasi numero di dimensioni.
- Resi :
- dzdx, dzdy np.ma.array
2 matrici mascherate della stessa forma di x e y ; i valori corrispondenti ai punti (x, y) al di fuori della triangolazione vengono mascherati. Il primo array restituito contiene i valori di \(\frac{\partial z}{\partial x}\)e il secondo quelli di \(\frac{\partial z}{\partial y}\).
- classe matplotlib.tri. CubicTriInterpolator ( triangolazione , z , kind = 'min_E' , trifinder = None , dz = None ) [fonte] #
Basi:
TriInterpolator
Interpolatore cubico su una griglia triangolare.
In una dimensione - su un segmento - una funzione di interpolazione cubica è definita dai valori della funzione e dalla sua derivata ad entrambe le estremità. Questo è quasi lo stesso in 2D all'interno di un triangolo, tranne per il fatto che i valori della funzione e le sue 2 derivate devono essere definiti in ogni nodo del triangolo.
Il CubicTriInterpolator prende il valore della funzione in ogni nodo - fornito dall'utente - e calcola internamente il valore delle derivate, risultando in un'interpolazione regolare. (Come caratteristica speciale, l'utente può anche imporre il valore delle derivate a ciascun nodo, ma questo non dovrebbe essere l'uso comune.)
- Parametri :
- triangolazione
Triangulation
La triangolazione su cui eseguire l'interpolazione.
- z (npoints,) simile a un array
Matrice di valori, definita nei punti della griglia, tra cui interpolare.
- kind {'min_E', 'geom', 'user'}, facoltativo
Scelta dell'algoritmo di smoothing, al fine di calcolare le derivate interpolanti (il valore predefinito è 'min_E'):
if 'min_E': (predefinito) Le derivate in ogni nodo sono calcolate per minimizzare un'energia di flessione.
if 'geom': le derivate in ciascun nodo vengono calcolate come media ponderata delle normali triangolari pertinenti. Da utilizzare per l'ottimizzazione della velocità (griglie grandi).
if 'user': L'utente fornisce l'argomento dz , quindi non è necessario alcun calcolo.
- trifinder
TriFinder
, opzionale Se non specificato, verrà utilizzato il TriFinder predefinito della triangolazione chiamando
Triangulation.get_trifinder
.- dz tupla di array-like (dzdx, dzdy), facoltativo
Usato solo se kind ='user'. In questo caso dz deve essere fornito come (dzdx, dzdy) dove dzdx, dzdy sono array della stessa forma di z e sono le derivate prime interpolanti nei punti di triangolazione .
- triangolazione
Appunti
Questa nota è un po' tecnica e descrive in dettaglio come viene calcolata l'interpolazione cubica.
L'interpolazione si basa su uno schema di suddivisione Clough-Tocher della mesh di triangolazione (per chiarezza, ogni triangolo della griglia sarà diviso in 3 triangoli figli, e su ogni triangolo figlio la funzione interpolata è un polinomio cubico dei 2 coordinate). Questa tecnica nasce dall'analisi FEM (Finite Element Method); l'elemento utilizzato è un elemento Hsieh-Clough-Tocher (HCT) ridotto. Le sue funzioni di forma sono descritte in [1] . La funzione assemblata è garantita C1-liscia, cioè è continua e anche le sue derivate prime sono continue (questo è facile da mostrare all'interno dei triangoli ma è vero anche quando si incrociano i bordi).
Nel caso predefinito ( kind ='min_E'), l'interpolante minimizza un'energia di curvatura sullo spazio funzionale generato dalle funzioni di forma dell'elemento HCT - con valori imposti ma derivate arbitrarie in ogni nodo. Il funzionale minimizzato è l'integrale della cosiddetta curvatura totale (implementazione basata su un algoritmo da [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\]Se l'utente sceglie il caso kind ='geom', viene utilizzata una semplice approssimazione geometrica (media pesata dei vettori normali del triangolo), che potrebbe migliorare la velocità su griglie molto grandi.
Riferimenti
[ 1 ]Michel Bernadou, Kamal Hassan, "Funzioni di base per triangoli Hsieh-Clough-Tocher generali, completi o ridotti.", International Journal for Numerical Methods in Engineering, 17(5):784 - 789. 2.01.
[ 2 ]CT Kelley, "Metodi iterativi per l'ottimizzazione".
Metodi
`__chiama__` (x, y)
(Restituisce i valori interpolati nei punti (x, y).)
`gradiente` (x, y)
(Restituisce le derivate interpolate nei punti (x, y).)
- gradiente ( x , y ) [fonte] #
Restituisce un elenco di 2 matrici mascherate contenenti derivate interpolate nei punti (x, y) specificati.
- Parametri :
- x, y simile a un array
coordinate x e y della stessa forma e qualsiasi numero di dimensioni.
- Resi :
- dzdx, dzdy np.ma.array
2 matrici mascherate della stessa forma di x e y ; i valori corrispondenti ai punti (x, y) al di fuori della triangolazione vengono mascherati. Il primo array restituito contiene i valori di \(\frac{\partial z}{\partial x}\)e il secondo quelli di \(\frac{\partial z}{\partial y}\).
- classe matplotlib.tri. TriRefiner ( triangolazione ) [fonte] #
Classe base astratta per le classi che implementano il perfezionamento della mesh.
Un TriRefiner incapsula un oggetto Triangulation e fornisce strumenti per l'affinamento e l'interpolazione della mesh.
Le classi derivate devono implementare:
refine_triangulation(return_tri_index=False, **kwargs)
, dove gli argomenti facoltativi della parola chiave kwargs sono definiti in ogni implementazione concreta di TriRefiner e che restituisce:una raffinata triangolazione,
facoltativamente (a seconda di return_tri_index ), per ogni punto della triangolazione raffinata: l'indice del triangolo di triangolazione iniziale a cui appartiene.
refine_field(z, triinterpolator=None, **kwargs)
, dove:z array di valori di campo (da perfezionare) definiti nei nodi di triangolazione di base,
triinterpolatore è un optional
TriInterpolator
,gli altri argomenti facoltativi della parola chiave kwargs sono definiti in ciascuna implementazione concreta di TriRefiner;
e che restituisce (come tupla) una mesh triangolare raffinata ei valori interpolati del campo nei nodi di triangolazione raffinati.
- classe matplotlib.tri. UniformTriRefiner ( triangolazione ) [fonte] #
Basi:
TriRefiner
Rifinitura uniforme della mesh mediante suddivisioni ricorsive.
- Parametri :
- triangolazione
Triangulation
La triangolazione incapsulata (da perfezionare)
- triangolazione
- refine_field ( z , triinterpolatore = None , subdiv = 3 ) [fonte] #
Perfeziona un campo definito sulla triangolazione incapsulata.
- Parametri :
- z (npoints,) simile a un array
Valori del campo da raffinare, definiti nei nodi della triangolazione incapsulata. (
n_points
è il numero di punti nella triangolazione iniziale)- triinterpolatore
TriInterpolator
, facoltativo Interpolatore utilizzato per l'interpolazione del campo. Se non specificato,
CubicTriInterpolator
verrà utilizzato a.- subdiv int, predefinito: 3
Livello di ricorsione per la suddivisione. Ogni triangolo è diviso in
4**subdiv
triangoli figli.
- Resi :
- refi_tri
Triangulation
La raffinata triangolazione restituita.
- refi_z Array 1D di lunghezza: numero di nodi refi_tri .
Il campo interpolato restituito (nei nodi refi_tri ).
- refi_tri
- refine_triangulation ( return_tri_index = False , subdiv = 3 ) [fonte] #
Calcola una triangolazione rifinita in modo uniforme refi_triangulation dell'encapsulated
triangulation
.Questa funzione affina la triangolazione incapsulata suddividendo ogni triangolo padre in 4 sottotriangoli figli costruiti sui nodi midside dei bordi, ricorrendo i tempi di suddivisione. Alla fine, ogni triangolo è quindi diviso in
4**subdiv
triangoli figli.- Parametri :
- return_tri_index bool, predefinito: falso
Se viene restituita una tabella di indice che indica l'indice del triangolo padre di ogni punto.
- subdiv int, predefinito: 3
Livello di ricorsione per la suddivisione. Ogni triangolo è diviso in
4**subdiv
triangoli figli; quindi, l'impostazione predefinita risulta in 64 sottotriangoli rifiniti per ogni triangolo della triangolazione iniziale.
- Resi :
- refi_triangolazione
Triangulation
La raffinata triangolazione.
- found_index int matrice
Indice della triangolazione iniziale contenente il triangolo, per ogni punto di refi_triangulation . Restituito solo se return_tri_index è impostato su True.
- refi_triangolazione
- classe matplotlib.tri. TriAnalyzer ( triangolazione ) [fonte] #
Definire gli strumenti di base per l'analisi e il miglioramento della mesh triangolare.
Un TriAnalyzer incapsula un
Triangulation
oggetto e fornisce strumenti di base per l'analisi della mesh e il miglioramento della mesh.- Parametri :
- triangolazione
Triangulation
La triangolazione incapsulata da analizzare.
- triangolazione
- Attributi :
scale_factors
Fattori per ridimensionare la triangolazione in un quadrato unitario.
- circle_ratios ( rescale = True ) [fonte] #
Restituisce una misura della planarità dei triangoli di triangolazione.
Il rapporto tra il raggio del cerchio e il raggio del cerchio è un indicatore ampiamente utilizzato della planarità di un triangolo. Lo è sempre e solo per i triangoli equilateri. I rapporti dei cerchi inferiori a 0,01 denotano triangoli molto piatti.
<= 0.5
== 0.5
Per evitare valori eccessivamente bassi a causa di una differenza di scala tra i 2 assi, la mesh triangolare può essere prima ridimensionata per adattarsi all'interno di un quadrato unitario con
scale_factors
(Solo se rescale è True, che è il suo valore predefinito).- Parametri :
- rescale bool, predefinito: vero
Se True, ridimensiona internamente (basato su
scale_factors
), in modo che i triangoli (non mascherati) si adattino esattamente all'interno di una mesh quadrata unitaria.
- Resi :
- matrice mascherata
Rapporto del raggio incircle rispetto al raggio circumcircle, per ogni triangolo "ridimensionato" della triangolazione incapsulata. I valori corrispondenti ai triangoli mascherati vengono mascherati.
- get_flat_tri_mask ( min_circle_ratio = 0.01 , rescale = True ) [fonte] #
Elimina i triangoli di bordo eccessivamente piatti dalla triangolazione.
Restituisce una maschera new_mask che permette di ripulire la triangolazione incapsulata dai suoi triangoli piatti posizionati sul bordo (secondo la loro
circle_ratios()
). Questa maschera è pensata per essere successivamente applicata alla triangolazione usandoTriangulation.set_mask
. new_mask è un'estensione della maschera di triangolazione iniziale, nel senso che un triangolo inizialmente mascherato rimarrà mascherato.L' array new_mask viene calcolato in modo ricorsivo; ad ogni passaggio i triangoli piatti vengono rimossi solo se condividono un lato con il bordo mesh corrente. Pertanto non verranno creati nuovi buchi nel dominio triangolato.
- Parametri :
- min_circle_ratio float, predefinito: 0.01
I triangoli di bordo con rapporto raggi incircle/circoncircle r/R verranno rimossi se r/R < min_circle_ratio .
- rescale bool, predefinito: vero
Se True, per prima cosa ridimensiona internamente (basato su
scale_factors
) in modo che i triangoli (non mascherati) si adattino esattamente all'interno di una mesh quadrata unitaria. Questo ridimensionamento tiene conto della differenza di scala che potrebbe esistere tra i 2 assi.
- Resi :
- matrice di bool
Maschera da applicare alla triangolazione incapsulata. Tutti i triangoli inizialmente mascherati rimangono mascherati nel new_mask .
Appunti
La logica alla base di questa funzione è che una triangolazione di Delaunay - di un insieme di punti non strutturati - a volte contiene triangoli quasi piatti al suo bordo, portando ad artefatti nelle trame (specialmente per il contouring ad alta risoluzione). Mascherata con calcolata new_mask , la triangolazione incapsulata non conterrebbe più triangoli di bordo non mascherati con un rapporto del cerchio inferiore a min_circle_ratio , migliorando così la qualità della mesh per grafici successivi o interpolazione.
- proprietà scale_factors #
Fattori per ridimensionare la triangolazione in un quadrato unitario.
- Resi :
- (galleggiare, galleggiare)
Fattori di scala (kx, ky) in modo che la triangolazione rientri esattamente in un quadrato unitario.
[triangulation.x * kx, triangulation.y * ky]