matplotlib.tri#

Funções de grade triangular não estruturada.

classe matplotlib.tri. Triangulação ( x , y , triângulos = Nenhum , máscara = Nenhum ) [fonte] #

Uma grade triangular não estruturada consistindo de npontos pontos e ntri triângulos. Os triângulos podem ser especificados pelo usuário ou gerados automaticamente usando uma triangulação de Delaunay.

Parâmetros :
x, y (npontos,) tipo array

Coordenadas dos pontos da grade.

triângulos (ntri, 3) tipo array de int, opcional

Para cada triângulo, os índices dos três pontos que compõem o triângulo, ordenados no sentido anti-horário. Se não for especificado, a triangulação de Delaunay é calculada.

mask (ntri,) tipo array de bool, opcional

Quais triângulos são mascarados.

Notas

Para que uma Triangulação seja válida, ela não deve ter pontos duplicados, triângulos formados a partir de pontos colineares ou triângulos sobrepostos.

Atributos :
triângulos (ntri, 3) array de int

Para cada triângulo, os índices dos três pontos que compõem o triângulo, ordenados no sentido anti-horário. Se você quiser levar em conta a máscara , use get_masked_trianglesem seu lugar.

máscara (ntri, 3) matriz de bool

Triângulos mascarados.

is_delaunay bool

Se a triangulação é uma triangulação Delaunay calculada (onde os triângulos não foram especificados) ou não.

calcula_plane_coeficientes ( z ) [fonte] #

Calcule os coeficientes da equação plana para todos os triângulos não mascarados a partir das coordenadas do ponto (x, y) e da matriz z especificada da forma (npontos). A matriz retornada tem formato (npoints, 3) e permite que o valor z na posição (x, y) no triângulo tri seja calculado usando .z = array[tri, 0] * x  + array[tri, 1] * y + array[tri, 2]

bordas de propriedade #

Retorna a matriz inteira da forma (bordas, 2) contendo todas as arestas de triângulos não mascarados.

Cada linha define uma borda por seu índice de ponto inicial e índice de ponto final. Cada aresta aparece apenas uma vez, ou seja, para uma aresta entre os pontos i e j , haverá apenas (i, j) ou (j, i) .

get_cpp_triangulation ( ) [fonte] #

Retorne o objeto C++ Triangulation subjacente, criando-o se necessário.

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

Retorne um objeto Triangulation dos args e kwargs e os args e kwargs restantes com os valores consumidos removidos.

Existem duas alternativas: ou o primeiro argumento é um objeto de Triangulação, caso em que é retornado, ou os args e kwargs são suficientes para criar uma nova Triangulação para retornar. No último caso, veja Triangulation.__init__ para os possíveis args e kwargs.

get_masked_triangles ( ) [fonte] #

Retorne uma matriz de triângulos levando em consideração a máscara.

get_trifinder ( ) [fonte] #

Retorne o padrão matplotlib.tri.TriFinderdesta triangulação, criando-a se necessário. Isso permite que o mesmo objeto TriFinder seja facilmente compartilhado.

vizinhos da propriedade #

Retorna uma matriz inteira de forma (ntri, 3) contendo triângulos vizinhos.

Para cada triângulo, os índices dos três triângulos que compartilham as mesmas arestas, ou -1 se não houver tal triângulo vizinho. é o triângulo que é o vizinho da aresta de índice de ponto a índice de ponto .neighbors[i, j]triangles[i, j]triangles[i, (j+1)%3]

set_mask ( máscara ) [fonte] #

Defina ou limpe a matriz de máscara.

Parâmetros :
máscara Nenhum ou matriz bool de comprimento ntri
classe matplotlib.tri. TriContourSet ( ax , * args , ** kwargs ) [fonte] #

Bases:ContourSet

Crie e armazene um conjunto de linhas de contorno ou regiões preenchidas para uma grade triangular.

Essa classe normalmente não é instanciada diretamente pelo usuário, mas por tricontoure tricontourf.

Atributos :
machadoAxes

O objeto Axes no qual os contornos são desenhados.

coleções silent_listde PathCollections

Os Artists representam o contorno. Esta é uma lista de PathCollections para linhas e contornos preenchidos.

matriz de níveis

Os valores dos níveis de contorno.

matriz de camadas

Igual aos níveis para contornos de linha; a meio caminho entre os níveis para contornos preenchidos. Veja ContourSet._process_colors.

Desenhe linhas de contorno de grade triangulares ou regiões preenchidas , dependendo se a palavra-chave arg fill é False (padrão) ou True.

O primeiro argumento do inicializador deve ser um Axes objeto. Os argumentos restantes e os argumentos de palavra-chave são descritos na docstring de tricontour.

classe matplotlib.tri. TriFinder ( triangulação ) [fonte] #

Classe base abstrata para classes usadas para encontrar os triângulos de uma Triangulação na qual estão os pontos (x, y).

Em vez de instanciar um objeto de uma classe derivada do TriFinder, geralmente é melhor usar a função Triangulation.get_trifinder.

Classes derivadas implementam __call__(x, y) onde x e y são coordenadas de pontos semelhantes a matrizes com a mesma forma.

classe matplotlib.tri. TrapezoidMapTriFinder ( triangulação ) [fonte] #

Bases:TriFinder

TriFinderclasse implementada usando o algoritmo trapezoid map do livro "Computational Geometry, Algorithms and Applications", segunda edição, de M. de Berg, M. van Kreveld, M. Overmars e O. Schwarzkopf.

A triangulação deve ser válida, ou seja, não deve ter pontos duplicados, triângulos formados a partir de pontos colineares ou triângulos sobrepostos. O algoritmo tem alguma tolerância para triângulos formados a partir de pontos colineares, mas isso não deve ser considerado.

classe matplotlib.tri. TriInterpolator ( triangulação , z , trifinder = Nenhum ) [fonte] #

Classe base abstrata para classes usadas para interpolar em uma grade triangular.

As classes derivadas implementam os seguintes métodos:

  • __call__(x, y), onde x, y são coordenadas de pontos semelhantes a matrizes da mesma forma e que retorna uma matriz mascarada da mesma forma contendo os valores z interpolados.

  • gradient(x, y), onde x, y são coordenadas de pontos semelhantes a matrizes da mesma forma e que retorna uma lista de 2 matrizes mascaradas da mesma forma contendo as 2 derivadas do interpolador (derivadas de valores z interpolados em relação a x e y).

classe matplotlib.tri. LinearTriInterpolator ( triangulação , z , trifinder = Nenhum ) [fonte] #

Bases:TriInterpolator

Interpolador linear em uma grade triangular.

Cada triângulo é representado por um plano de modo que um valor interpolado no ponto (x, y) esteja no plano do triângulo que contém (x, y). Os valores interpolados são, portanto, contínuos na triangulação, mas suas primeiras derivadas são descontínuas nas arestas entre os triângulos.

Parâmetros :
triangulaçãoTriangulation

A triangulação a ser interpolada.

z (npontos,) tipo matriz

Matriz de valores, definidos em pontos de grade, para interpolar entre eles.

trifinder TriFinder, opcional

Se isso não for especificado, o TriFinder padrão da triangulação será usado chamando Triangulation.get_trifinder.

Métodos

`__call__` (x, y)

(Retorna valores interpolados em pontos (x, y).)

`gradiente` (x, y)

(Retorna derivadas interpoladas em pontos (x, y).)

gradiente ( x , y ) [fonte] #

Retorna uma lista de 2 matrizes mascaradas contendo derivadas interpoladas nos pontos especificados (x, y).

Parâmetros :
x, y semelhante a uma matriz

coordenadas x e y da mesma forma e qualquer número de dimensões.

Devoluções :
dzdx, dzdy np.ma.array

2 matrizes mascaradas da mesma forma que x e y ; os valores correspondentes aos pontos (x, y) fora da triangulação são mascarados. A primeira matriz retornada contém os valores de \(\frac{\partial z}{\partial x}\)e o segundo os de \(\frac{\partial z}{\partial y}\).

classe matplotlib.tri. CubicTriInterpolator ( triangulação , z , tipo = 'min_E' , trifinder = Nenhum , dz = Nenhum ) [fonte] #

Bases:TriInterpolator

Interpolador cúbico em uma grade triangular.

Em uma dimensão - em um segmento - uma função de interpolação cúbica é definida pelos valores da função e sua derivada em ambas as extremidades. Isso é quase o mesmo em 2D dentro de um triângulo, exceto que os valores da função e suas 2 derivadas devem ser definidos em cada nó do triângulo.

O CubicTriInterpolator pega o valor da função em cada nó - fornecido pelo usuário - e calcula internamente o valor das derivadas, resultando em uma interpolação suave. (Como recurso especial, o usuário também pode impor o valor das derivadas em cada nó, mas esse não é o uso comum.)

Parâmetros :
triangulaçãoTriangulation

A triangulação a ser interpolada.

z (npontos,) tipo matriz

Matriz de valores, definidos em pontos de grade, para interpolar entre eles.

tipo {'min_E', 'geom', 'usuário'}, opcional

Escolha do algoritmo de suavização, a fim de calcular as derivadas interpolantes (o padrão é 'min_E'):

  • if 'min_E': (padrão) As derivadas em cada nó são calculadas para minimizar a energia de flexão.

  • if 'geom': As derivadas em cada nó são calculadas como uma média ponderada de normais de triângulo relevantes. Para ser usado para otimização de velocidade (grades grandes).

  • if 'user': O usuário fornece o argumento dz , portanto, nenhum cálculo é necessário.

trifinder TriFinder, opcional

Se não for especificado, o TriFinder padrão da triangulação será usado chamando Triangulation.get_trifinder.

dz tupla de tipo array (dzdx, dzdy), opcional

Usado somente se tipo ='usuário'. Neste caso, dz deve ser fornecido como (dzdx, dzdy) onde dzdx, dzdy são matrizes da mesma forma que z e são as primeiras derivadas interpolantes nos pontos de triangulação .

Notas

Esta nota é um pouco técnica e detalha como a interpolação cúbica é calculada.

A interpolação é baseada em um esquema de subdivisão Clough-Tocher da malha de triangulação (para deixar mais claro, cada triângulo da grade será dividido em 3 triângulos filhos, e em cada triângulo filho a função interpolada é um polinômio cúbico dos 2 coordenadas). Esta técnica origina-se da análise FEM (Finite Element Method); o elemento usado é um elemento Hsieh-Clough-Tocher (HCT) reduzido. Suas funções de forma são descritas em [1] . A função montada é garantidamente C1-suave, ou seja, é contínua e suas primeiras derivadas também são contínuas (isso é fácil de mostrar dentro dos triângulos, mas também é verdade ao cruzar as arestas).

No caso padrão ( kind ='min_E'), o interpolante minimiza uma energia de curvatura no espaço funcional gerado pelas funções de forma do elemento HCT - com valores impostos, mas derivadas arbitrárias em cada nó. O funcional minimizado é a integral da chamada curvatura total (implementação baseada em um 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\]

Se o usuário escolher o caso kind ='geom', uma aproximação geométrica simples é usada (média ponderada dos vetores normais do triângulo), o que pode melhorar a velocidade em grades muito grandes.

Referências

[ 1 ]

Michel Bernadou, Kamal Hassan, "Funções básicas para triângulos gerais de Hsieh-Clough-Tocher, completos ou reduzidos.", Jornal Internacional de Métodos Numéricos em Engenharia, 17(5):784 - 789. 2.01.

[ 2 ]

CT Kelley, "Métodos Iterativos para Otimização".

Métodos

`__call__` (x, y)

(Retorna valores interpolados em pontos (x, y).)

`gradiente` (x, y)

(Retorna derivadas interpoladas em pontos (x, y).)

gradiente ( x , y ) [fonte] #

Retorna uma lista de 2 matrizes mascaradas contendo derivadas interpoladas nos pontos especificados (x, y).

Parâmetros :
x, y semelhante a uma matriz

coordenadas x e y da mesma forma e qualquer número de dimensões.

Devoluções :
dzdx, dzdy np.ma.array

2 matrizes mascaradas da mesma forma que x e y ; os valores correspondentes aos pontos (x, y) fora da triangulação são mascarados. A primeira matriz retornada contém os valores de \(\frac{\partial z}{\partial x}\)e o segundo os de \(\frac{\partial z}{\partial y}\).

classe matplotlib.tri. TriRefiner ( triangulação ) [fonte] #

Classe base abstrata para classes que implementam refinamento de malha.

Um TriRefiner encapsula um objeto de triangulação e fornece ferramentas para refinamento e interpolação de malha.

Classes derivadas devem implementar:

  • refine_triangulation(return_tri_index=False, **kwargs), onde os argumentos de palavra-chave opcionais kwargs são definidos em cada implementação concreta do TriRefiner e que retorna:

    • uma triangulação refinada,

    • opcionalmente (dependendo de return_tri_index ), para cada ponto da triangulação refinada: o índice do triângulo de triangulação inicial ao qual pertence.

  • refine_field(z, triinterpolator=None, **kwargs), Onde:

    • matriz z de valores de campo (para refinar) definidos nos nós de triangulação de base,

    • triinterpolador é opcional TriInterpolator,

    • os outros argumentos de palavra-chave opcionais kwargs são definidos em cada implementação concreta do TriRefiner;

    e que retorna (como uma tupla) uma malha triangular refinada e os valores interpolados do campo nos nós da triangulação refinada.

classe matplotlib.tri. UniformTriRefiner ( triangulação ) [fonte] #

Bases:TriRefiner

Refinamento uniforme da malha por subdivisões recursivas.

Parâmetros :
triangulaçãoTriangulation

A triangulação encapsulada (a ser refinada)

refine_field ( z , triinterpolador = Nenhum , subdiv = 3 ) [fonte] #

Refine um campo definido na triangulação encapsulada.

Parâmetros :
z (npontos,) tipo matriz

Valores do campo a refinar, definidos nos nós da triangulação encapsulada. ( n_pointsé o número de pontos na triangulação inicial)

triinterpolador TriInterpolator, opcional

Interpolador usado para interpolação de campo. Se não for especificado, CubicTriInterpolatorserá usado um.

subdiv int, padrão: 3

Nível de recursão para a subdivisão. Cada triângulo é dividido em 4**subdivtriângulos filhos.

Devoluções :
refi_triTriangulation

A triangulação refinada retornada.

refi_z Matriz 1D de comprimento: contagem de nós refi_tri .

O campo interpolado retornado (nos nós refi_tri ).

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

Calcule uma triangulação uniformemente refinada refi_triangulation do encapsulado triangulation.

Essa função refina a triangulação encapsulada dividindo cada triângulo pai em 4 subtriângulos filhos construídos nas arestas dos nós intermediários, recursando tempos subdiv. No final, cada triângulo é, portanto, dividido em 4**subdivtriângulos filhos.

Parâmetros :
return_tri_index bool, padrão: Falso

Se uma tabela de índice indicando o índice do triângulo pai de cada ponto é retornada.

subdiv int, padrão: 3

Nível de recursão para a subdivisão. Cada triângulo é dividido em 4**subdivtriângulos filhos; portanto, o padrão resulta em 64 subtriângulos refinados para cada triângulo da triangulação inicial.

Devoluções :
refi_triangulaçãoTriangulation

A triangulação refinada.

array int_indice_encontrado

Índice do triângulo contendo a triangulação inicial, para cada ponto de refi_triangulação . Retornado apenas se return_tri_index for definido como True.

classe matplotlib.tri. TriAnalyzer ( triangulação ) [fonte] #

Definir ferramentas básicas para análise e melhoria de malhas triangulares.

Um TriAnalyzer encapsula um Triangulationobjeto e fornece ferramentas básicas para análise de malha e melhoria de malha.

Parâmetros :
triangulaçãoTriangulation

A triangulação encapsulada para analisar.

Atributos :
scale_factors

Fatores para redimensionar a triangulação em um quadrado unitário.

circle_ratios ( rescale = True ) [fonte] #

Retorna uma medida da planicidade dos triângulos da triangulação.

A razão entre o raio do círculo sobre o raio do círculo é um indicador amplamente usado da planicidade de um triângulo. É sempre e somente para triângulos equiláteros. Razões de círculo abaixo de 0,01 denotam triângulos muito planos.<= 0.5== 0.5

Para evitar valores indevidamente baixos devido a uma diferença de escala entre os 2 eixos, a malha triangular pode primeiro ser redimensionada para caber dentro de um quadrado unitário com scale_factors(Somente se redimensionar for True, que é seu valor padrão).

Parâmetros :
rescale bool, padrão: True

Se True, redimensiona internamente (com base em scale_factors), para que os triângulos (desmascarados) caibam exatamente dentro de uma malha quadrada unitária.

Devoluções :
matriz mascarada

Razão do raio do círculo sobre o raio do círculo, para cada triângulo 'redimensionado' da triangulação encapsulada. Os valores correspondentes aos triângulos mascarados são mascarados.

get_flat_tri_mask ( min_circle_ratio = 0,01 , rescale = True ) [fonte] #

Elimine triângulos de borda excessivamente planos da triangulação.

Retorna uma máscara new_mask que permite limpar a triangulação encapsulada de seus triângulos planos localizados na borda (de acordo com seus circle_ratios()). Esta máscara destina-se a ser aplicada posteriormente à triangulação usando Triangulation.set_mask. new_mask é uma extensão da máscara de triangulação inicial no sentido de que um triângulo inicialmente mascarado permanecerá mascarado.

A matriz new_mask é calculada recursivamente; em cada etapa, os triângulos planos são removidos apenas se compartilharem um lado com a borda da malha atual. Assim, nenhum novo buraco no domínio triangulado será criado.

Parâmetros :
min_circle_ratio flutuante, padrão: 0,01

Triângulos de borda com razão de raio incircle/circuncircle r/R serão removidos se r/R < min_circle_ratio .

rescale bool, padrão: True

Se True, primeiro, redimensionar internamente (com base em scale_factors) para que os triângulos (desmascarados) se encaixem exatamente dentro de uma malha quadrada unitária. Este redimensionamento leva em conta a diferença de escala que pode existir entre os 2 eixos.

Devoluções :
matriz de bool

Máscara para aplicar na triangulação encapsulada. Todos os triângulos inicialmente mascarados permanecem mascarados na new_mask .

Notas

A lógica por trás dessa função é que uma triangulação de Delaunay - de um conjunto de pontos não estruturados - às vezes contém triângulos quase planos em sua borda, levando a artefatos em plotagens (especialmente para contornos de alta resolução). Mascarada com new_mask calculado , a triangulação encapsulada não conteria mais triângulos de borda não mascarados com uma proporção de círculo abaixo de min_circle_ratio , melhorando assim a qualidade da malha para plotagens ou interpolação subsequentes.

propriedade scale_factors #

Fatores para redimensionar a triangulação em um quadrado unitário.

Devoluções :
(flutuar, flutuar)

Fatores de escala (kx, ky) para que a triangulação caiba exatamente dentro de um quadrado unitário.[triangulation.x * kx, triangulation.y * ky]