matplotlib.tri#

Funciones de cuadrícula triangular no estructuradas.

clase matplotlib.tri. Triangulación ( x , y , triángulos = Ninguno , máscara = Ninguno ) [fuente] #

Una cuadrícula triangular no estructurada que consta de npuntos y ntri triángulos. Los triángulos pueden ser especificados por el usuario o generados automáticamente usando una triangulación de Delaunay.

Parámetros :
x, y (npuntos,) en forma de matriz

Coordenadas de los puntos de la cuadrícula.

triángulos (ntri, 3) en forma de matriz de int, opcional

Para cada triángulo, los índices de los tres puntos que forman el triángulo, ordenados en sentido antihorario. Si no se especifica, se calcula la triangulación de Delaunay.

máscara (ntri,) similar a una matriz de bool, opcional

Qué triángulos están enmascarados.

notas

Para que una Triangulación sea válida, no debe tener puntos duplicados, triángulos formados a partir de puntos colineales o triángulos superpuestos.

Atributos :
triángulos (ntri, 3) matriz de int

Para cada triángulo, los índices de los tres puntos que forman el triángulo, ordenados en sentido antihorario. Si desea tener en cuenta la máscara , utilícela en su get_masked_triangleslugar.

máscara (ntri, 3) matriz de bool

Triángulos enmascarados.

es_delaunay bool

Si la triangulación es una triangulación de Delaunay calculada (donde no se especificaron los triángulos ) o no.

calcular_plano_coeficientes ( z ) [fuente] #

Calcule los coeficientes de la ecuación plana para todos los triángulos desenmascarados a partir de las coordenadas del punto (x, y) y la matriz z de forma especificada (n puntos). La matriz devuelta tiene forma (npuntos, 3) y permite calcular el valor z en la posición (x, y) en el triángulo tri usando .z = array[tri, 0] * x  + array[tri, 1] * y + array[tri, 2]

bordes de propiedad #

Devuelve una matriz de enteros de forma (aristas, 2) que contiene todas las aristas de triángulos no enmascarados.

Cada fila define un borde por su índice de punto inicial y su índice de punto final. Cada arista aparece solo una vez, es decir, para una arista entre los puntos iyj , solo habrá (i, j) o ( j, i) .

get_cpp_triangulación ( ) [fuente] #

Devuelva el objeto de triangulación de C++ subyacente, creándolo si es necesario.

static get_from_args_and_kwargs ( * args , ** kwargs ) [fuente] #

Devuelve un objeto Triangulación de los argumentos y kwargs, y los argumentos y kwargs restantes con los valores consumidos eliminados.

Hay dos alternativas: el primer argumento es un objeto Triangulación, en cuyo caso se devuelve, o los args y kwargs son suficientes para crear una nueva Triangulación para devolver. En el último caso, consulte Triangulación.__init__ para ver los posibles argumentos y kwargs.

get_masked_triangles ( ) [fuente] #

Devuelve una matriz de triángulos teniendo en cuenta la máscara.

get_trifinder ( ) [fuente] #

Devuelve el valor predeterminado matplotlib.tri.TriFinderde esta triangulación, creándola si es necesario. Esto permite compartir fácilmente el mismo objeto TriFinder.

vecinos de propiedad #

Devuelve una matriz de enteros de forma (ntri, 3) que contiene triángulos vecinos.

Para cada triángulo, los índices de los tres triángulos que comparten las mismas aristas, o -1 si no existe tal triángulo vecino. es el triángulo vecino de la arista de índice de punto a índice de punto .neighbors[i, j]triangles[i, j]triangles[i, (j+1)%3]

set_mask ( máscara ) [fuente] #

Establezca o borre la matriz de máscaras.

Parámetros :
máscara Ninguno o matriz booleana de longitud ntri
clase matplotlib.tri. TriContourSet ( hacha , * argumentos , ** kwargs ) [fuente] #

Bases:ContourSet

Cree y almacene un conjunto de líneas de contorno o regiones rellenas para una cuadrícula triangular.

Esta clase normalmente no es instanciada directamente por el usuario sino por tricontoury tricontourf.

Atributos :
hachaAxes

El objeto Axes en el que se dibujan los contornos.

colecciones silent_listde PathCollections

La Artists que representa el contorno. Esta es una lista de PathCollections tanto para líneas como para contornos rellenos.

matriz de niveles

Los valores de los niveles de contorno.

matriz de capas

Igual que los niveles para los contornos de línea; a mitad de camino entre niveles para contornos rellenos. ver ContourSet._process_colors_

Dibuje líneas de contorno de cuadrícula triangulares o regiones rellenas, dependiendo de si la palabra clave arg filled es False (predeterminado) o True.

El primer argumento del inicializador debe ser un Axes objeto. Los argumentos restantes y los argumentos de palabras clave se describen en la cadena de documentación de tricontour.

clase matplotlib.tri. TriFinder ( triangulación ) [fuente] #

Clase base abstracta para las clases utilizadas para encontrar los triángulos de una triangulación en la que se encuentran los puntos (x, y).

En lugar de instanciar un objeto de una clase derivada de TriFinder, normalmente es mejor usar la función Triangulation.get_trifinder.

Las clases derivadas implementan __call__(x, y) donde x e y son coordenadas de puntos en forma de matriz de la misma forma.

clase matplotlib.tri. TrapezoidMapTriFinder ( triangulación ) [fuente] #

Bases:TriFinder

TriFinderclase implementada utilizando el algoritmo de mapa trapezoidal del libro "Geometría Computacional, Algoritmos y Aplicaciones", segunda edición, por M. de Berg, M. van Kreveld, M. Overmars y O. Schwarzkopf.

La triangulación debe ser válida, es decir, no debe tener puntos duplicados, triángulos formados a partir de puntos colineales o triángulos superpuestos. El algoritmo tiene cierta tolerancia a los triángulos formados a partir de puntos colineales, pero no se debe confiar en esto.

clase matplotlib.tri. TriInterpolator ( triangulación , z , trifinder = Ninguno ) [fuente] #

Clase base abstracta para clases utilizadas para interpolar en una cuadrícula triangular.

Las clases derivadas implementan los siguientes métodos:

  • __call__(x, y), donde x, y son coordenadas de puntos similares a una matriz de la misma forma, y ​​que devuelve una matriz enmascarada de la misma forma que contiene los valores z interpolados.

  • gradient(x, y), donde x, y son coordenadas de puntos similares a matrices de la misma forma, y ​​que devuelve una lista de 2 matrices enmascaradas de la misma forma que contienen las 2 derivadas del interpolador (derivadas de valores z interpolados con respecto a x e y).

clase matplotlib.tri. LinearTriInterpolator ( triangulación , z , trifinder = Ninguno ) [fuente] #

Bases:TriInterpolator

Interpolador lineal en una rejilla triangular.

Cada triángulo está representado por un plano, de modo que un valor interpolado en el punto (x, y) se encuentra en el plano del triángulo que contiene (x, y). Por lo tanto, los valores interpolados son continuos a lo largo de la triangulación, pero sus primeras derivadas son discontinuas en los bordes entre triángulos.

Parámetros :
triangulaciónTriangulation

La triangulación sobre la que interpolar.

z (npuntos,) tipo matriz

Matriz de valores, definida en puntos de cuadrícula, para interpolar entre ellos.

tribuscador TriFinder, opcional

Si no se especifica, se usará el TriFinder predeterminado de Triangulación llamando a Triangulation.get_trifinder.

Métodos

`__llamar__` (x, y)

(Devuelve valores interpolados en los puntos (x, y).)

`gradiente` (x, y)

(Devuelve las derivadas interpoladas en los puntos (x, y).)

gradiente ( x , y ) [fuente] #

Devuelve una lista de 2 matrices enmascaradas que contienen derivadas interpoladas en los puntos (x, y) especificados.

Parámetros :
x, y en forma de matriz

coordenadas x e y de la misma forma y cualquier número de dimensiones.

Devoluciones :
dzdx, dzdy np.ma.arreglo

2 matrices enmascaradas de la misma forma que x e y ; los valores correspondientes a (x, y) puntos fuera de la triangulación están enmascarados. La primera matriz devuelta contiene los valores de \(\frac{\partial z}{\partial x}\)y el segundo los de \(\frac{\partial z}{\partial y}\).

clase matplotlib.tri. CubicTriInterpolator ( triangulación , z , tipo = 'min_E' , trifinder = Ninguno , dz = Ninguno ) [fuente] #

Bases:TriInterpolator

Interpolador cúbico en una cuadrícula triangular.

En una dimensión, en un segmento, una función de interpolación cúbica se define por los valores de la función y su derivada en ambos extremos. Esto es casi lo mismo en 2D dentro de un triángulo, excepto que los valores de la función y sus 2 derivadas deben definirse en cada nodo del triángulo.

El CubicTriInterpolator toma el valor de la función en cada nodo, proporcionado por el usuario, y calcula internamente el valor de las derivadas, lo que da como resultado una interpolación suave. (Como característica especial, el usuario también puede imponer el valor de los derivados en cada nodo, pero se supone que este no es el uso común).

Parámetros :
triangulaciónTriangulation

La triangulación sobre la que interpolar.

z (npuntos,) tipo matriz

Matriz de valores, definida en puntos de cuadrícula, para interpolar entre ellos.

tipo {'min_E', 'geom', 'usuario'}, opcional

Elección del algoritmo de suavizado para calcular las derivadas interpolantes (predeterminado en 'min_E'):

  • if 'min_E': (predeterminado) Las derivadas en cada nodo se calculan para minimizar la energía de flexión.

  • if 'geom': las derivadas en cada nodo se calculan como un promedio ponderado de las normales triangulares relevantes. Para ser utilizado para la optimización de la velocidad (redes grandes).

  • if 'usuario': el usuario proporciona el argumento dz , por lo tanto, no se necesita ningún cálculo.

tribuscador TriFinder, opcional

Si no se especifica, se usará el TriFinder predeterminado de Triangulación llamando a Triangulation.get_trifinder.

dz tuple de array-likes (dzdx, dzdy), opcional

Solo se usa si tipo = 'usuario'. En este caso , dz debe proporcionarse como (dzdx, dzdy) donde dzdx, dzdy son matrices de la misma forma que z y son las primeras derivadas interpolantes en los puntos de triangulación .

notas

Esta nota es un poco técnica y detalla cómo se calcula la interpolación cúbica.

La interpolación se basa en un esquema de subdivisión Clough-Tocher de la malla de triangulación (para que quede más claro, cada triángulo de la cuadrícula se dividirá en 3 triángulos hijos, y en cada triángulo hijo la función interpolada es un polinomio cúbico de los 2 coordenadas). Esta técnica tiene su origen en el análisis FEM (método de elementos finitos); el elemento utilizado es un elemento Hsieh-Clough-Tocher (HCT) reducido. Sus funciones de forma se describen en [1] . Se garantiza que la función ensamblada sea C1-suave, es decir, es continua y sus primeras derivadas también son continuas (esto es fácil de mostrar dentro de los triángulos pero también es cierto cuando se cruzan los bordes).

En el caso predeterminado ( kind ='min_E'), el interpolante minimiza una energía de curvatura en el espacio funcional generado por las funciones de forma del elemento HCT, con valores impuestos pero derivadas arbitrarias en cada nodo. El funcional minimizado es la integral de la llamada curvatura total (implementación basada en un algoritmo de [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\]

Si el usuario elige el caso kind ='geom', se usa una aproximación geométrica simple (promedio ponderado de los vectores triangulares normales), que podría mejorar la velocidad en cuadrículas muy grandes.

Referencias

[ 1 ]

Michel Bernadou, Kamal Hassan, "Funciones de base para triángulos generales de Hsieh-Clough-Tocher, completos o reducidos", International Journal for Numerical Methods in Engineering, 17(5):784 - 789. 2.01.

[ 2 ]

CT Kelley, "Métodos iterativos para la optimización".

Métodos

`__llamar__` (x, y)

(Devuelve valores interpolados en los puntos (x, y).)

`gradiente` (x, y)

(Devuelve las derivadas interpoladas en los puntos (x, y).)

gradiente ( x , y ) [fuente] #

Devuelve una lista de 2 matrices enmascaradas que contienen derivadas interpoladas en los puntos (x, y) especificados.

Parámetros :
x, y en forma de matriz

coordenadas x e y de la misma forma y cualquier número de dimensiones.

Devoluciones :
dzdx, dzdy np.ma.arreglo

2 matrices enmascaradas de la misma forma que x e y ; los valores correspondientes a (x, y) puntos fuera de la triangulación están enmascarados. La primera matriz devuelta contiene los valores de \(\frac{\partial z}{\partial x}\)y el segundo los de \(\frac{\partial z}{\partial y}\).

clase matplotlib.tri. TriRefiner ( triangulación ) [fuente] #

Clase base abstracta para clases que implementan refinamiento de malla.

Un TriRefiner encapsula un objeto de Triangulación y proporciona herramientas para el refinamiento y la interpolación de mallas.

Las clases derivadas deben implementar:

  • refine_triangulation(return_tri_index=False, **kwargs), donde los argumentos de palabra clave opcionales kwargs se definen en cada implementación concreta de TriRefiner, y que devuelve:

    • una triangulación refinada,

    • opcionalmente (dependiendo de return_tri_index ), para cada punto de la triangulación refinada: el índice del triángulo de triangulación inicial al que pertenece.

  • refine_field(z, triinterpolator=None, **kwargs), dónde:

    • matriz z de valores de campo (para refinar) definidos en los nodos de triangulación base,

    • triinterpolator es un opcional TriInterpolator,

    • los otros argumentos de palabra clave opcionales kwargs se definen en cada implementación concreta de TriRefiner;

    y que devuelve (como una tupla) una malla triangular refinada y los valores interpolados del campo en los nodos de triangulación refinada.

clase matplotlib.tri. UniformTriRefiner ( triangulación ) [fuente] #

Bases:TriRefiner

Refinamiento de malla uniforme por subdivisiones recursivas.

Parámetros :
triangulaciónTriangulation

La triangulación encapsulada (a ser refinado)

refine_field ( z , triinterpolador = Ninguno , subdiv = 3 ) [fuente] #

Refina un campo definido en la triangulación encapsulada.

Parámetros :
z (npuntos,) tipo matriz

Valores del campo a refinar, definidos en los nodos de la triangulación encapsulada. ( n_pointses el número de puntos en la triangulación inicial)

triinterpolador TriInterpolator, opcional

Interpolador utilizado para la interpolación de campo. Si no se especifica, CubicTriInterpolatorse utilizará un.

subdiv int, por defecto: 3

Nivel de recursión para la subdivisión. Cada triángulo se divide en 4**subdivtriángulos secundarios.

Devoluciones :
refi_triTriangulation

La triangulación refinada devuelta.

refi_z Matriz 1D de longitud: recuento de nodos refi_tri .

El campo interpolado devuelto (en los nodos refi_tri ).

refine_triangulation ( return_tri_index = False , subdiv = 3 ) [fuente] #

Calcule una triangulación uniformemente refinada refi_triangulación del encapsulado triangulation.

Esta función refina la triangulación encapsulada dividiendo cada triángulo padre en 4 subtriángulos secundarios construidos en los nodos intermedios de los bordes, tiempos de subdiv recurrentes . Al final, cada triángulo se divide en 4**subdivtriángulos secundarios.

Parámetros :
return_tri_index bool, predeterminado: Falso

Si se devuelve una tabla de índice que indica el índice del triángulo padre de cada punto.

subdiv int, por defecto: 3

Nivel de recursión para la subdivisión. Cada triángulo se divide en 4**subdivtriángulos secundarios; por lo tanto, el valor predeterminado da como resultado 64 subtriángulos refinados para cada triángulo de la triangulación inicial.

Devoluciones :
refi_triangulaciónTriangulation

La triangulación refinada.

matriz int índice_encontrado

Índice de la triangulación inicial que contiene el triángulo, para cada punto de refi_triangulación . Solo se devuelve si return_tri_index se establece en True.

clase matplotlib.tri. TriAnalyzer ( triangulación ) [fuente] #

Definir herramientas básicas para el análisis y mejora de mallas triangulares.

Un TriAnalyzer encapsula un Triangulationobjeto y proporciona herramientas básicas para el análisis y la mejora de mallas.

Parámetros :
triangulaciónTriangulation

La triangulación encapsulada a analizar.

Atributos :
scale_factors

Factores para reescalar la triangulación a un cuadrado unitario.

circle_ratios ( reescalar = Verdadero ) [fuente] #

Devuelve una medida de la planitud de los triángulos de triangulación.

La relación entre el radio del círculo y el radio del círculo es un indicador ampliamente utilizado de la planitud de un triángulo. Es siempre y sólo para triángulos equiláteros. Las proporciones de los círculos por debajo de 0,01 denotan triángulos muy planos.<= 0.5== 0.5

Para evitar valores indebidamente bajos debido a una diferencia de escala entre los 2 ejes, la malla triangular se puede volver a escalar primero para que quepa dentro de un cuadrado unitario con scale_factors(solo si el cambio de escala es Verdadero, que es su valor predeterminado).

Parámetros :
reescalar bool, por defecto: Verdadero

Si es Verdadero, cambie la escala internamente (basado en scale_factors), de modo que los triángulos (desenmascarados) encajen exactamente dentro de una malla cuadrada unitaria.

Devoluciones :
matriz enmascarada

Relación del radio del círculo sobre el radio del círculo, para cada triángulo 'reescalado' de la triangulación encapsulada. Los valores correspondientes a triángulos enmascarados están enmascarados.

get_flat_tri_mask ( min_circle_ratio = 0.01 , rescale = True ) [fuente] #

Elimine los triángulos de borde excesivamente planos de la triangulación.

Devuelve una máscara new_mask que permite limpiar la triangulación encapsulada de sus triángulos planos ubicados en el borde (según su circle_ratios()). Esta máscara está destinada a ser aplicada posteriormente a la triangulación usando Triangulation.set_mask. new_mask es una extensión de la máscara de triangulación inicial en el sentido de que un triángulo inicialmente enmascarado permanecerá enmascarado.

La matriz new_mask se calcula recursivamente; en cada paso, los triángulos planos se eliminan solo si comparten un lado con el borde de malla actual. Por lo tanto, no se crearán nuevos agujeros en el dominio triangulado.

Parámetros :
min_circle_ratio flotante, predeterminado: 0.01

Los triángulos de borde con relación de radios dentro del círculo/circunferencia r/R se eliminarán si r/R < min_circle_ratio .

reescalar bool, por defecto: Verdadero

Si es Verdadero, primero, vuelva a escalar internamente (basado en scale_factors) para que los triángulos (desenmascarados) encajen exactamente dentro de una malla cuadrada unitaria. Este cambio de escala explica la diferencia de escala que podría existir entre los 2 ejes.

Devoluciones :
matriz de bool

Mascarilla para aplicar a triangulación encapsulada. Todos los triángulos inicialmente enmascarados permanecen enmascarados en new_mask .

notas

La razón detrás de esta función es que una triangulación de Delaunay, de un conjunto de puntos no estructurado, a veces contiene triángulos casi planos en su borde, lo que genera artefactos en las gráficas (especialmente para contornos de alta resolución). Enmascarada con new_mask calculada , la triangulación encapsulada no contendría más triángulos de borde sin máscara con una proporción de círculo inferior a min_circle_ratio , mejorando así la calidad de la malla para gráficos o interpolaciones posteriores.

propiedad scale_factors #

Factores para reescalar la triangulación a un cuadrado unitario.

Devoluciones :
(flotar, flotar)

Factores de escala (kx, ky) para que la triangulación encaje exactamente dentro de un cuadrado unitario.[triangulation.x * kx, triangulation.y * ky]