matplotlib.tri
#
非構造化三角格子関数。
- クラス matplotlib.tri。三角測量( x , y ,三角形=なし,マスク=なし) [source] #
npoints 点と ntri 三角形で構成される構造化されていない三角形グリッド。三角形は、ユーザーが指定するか、Delaunay 三角形分割を使用して自動的に生成できます。
- パラメータ:
- x, y (npoints,) 配列のようなもの
格子点の座標。
- 三角形(ntri, 3) int の配列のようなもの、オプション
三角形ごとに、三角形を構成する 3 つの点のインデックスが反時計回りに並べられています。指定しない場合、ドロネー三角形分割が計算されます。
- mask (ntri,) bool の配列のようなもの、オプション
どの三角形がマスクされているか。
ノート
三角形分割が有効であるためには、重複する点、同一線上の点から形成される三角形、または重なり合う三角形があってはなりません。
- 属性:
- 三角形(ntri, 3) int の配列
三角形ごとに、三角形を構成する 3 つの点のインデックスが反時計回りに並べられています。マスクを考慮したい場合は、
get_masked_triangles
代わりに使用してください。- mask (ntri, 3) bool の配列
三角形をマスクします。
- is_delaunayブール
Triangulation が計算された Delaunay 三角形分割 (三角形が指定されていない場合) であるかどうか。
- calculate_plane_coefficients ( z ) [ソース] #
ポイント (x, y) 座標と指定された形状の z 配列 (npoints) から、マスクされていないすべての三角形の平面方程式係数を計算します。返された配列の形状は (npoints, 3) で、三角形 tri の (x, y) 位置の z 値を を使用して計算できます 。
z = array[tri, 0] * x + array[tri, 1] * y + array[tri, 2]
- プロパティの エッジ#
マスクされていない三角形のすべてのエッジを含む形状 (nedges, 2) の整数配列を返します。
各行は、始点インデックスと終点インデックスによってエッジを定義します。各エッジは 1 回だけ表示されます。つまり、ポイント iとjの間のエッジの場合、 (i, j)または(j, i)のいずれかのみが存在します。
- static get_from_args_and_kwargs ( * args , ** kwargs ) [source] #
args と kwargs から Triangulation オブジェクトを返し、残りの args と kwargs から消費された値を削除します。
2 つの選択肢があります。最初の引数が Triangulation オブジェクトである場合はそれが返されます。または、args と kwargs だけで新しい Triangulation を作成して返すことができます。後者の場合、可能な引数と kwargs については Triangulation.__init__ を参照してください。
- get_trifinder ( ) [ソース] #
matplotlib.tri.TriFinder
この三角形分割のデフォルトを返し、必要に応じて作成します。これにより、同じ TriFinder オブジェクトを簡単に共有できます。
- プロパティ の隣人#
隣接する三角形を含む形状 (ntri, 3) の整数配列を返します。
三角形ごとに、同じエッジを共有する 3 つの三角形のインデックス、または隣接する三角形がない場合は -1。ポイント indexから ポイント index までのエッジに隣接する三角形です。
neighbors[i, j]
triangles[i, j]
triangles[i, (j+1)%3]
- クラス matplotlib.tri。TriContourSet ( ax , * args , ** kwargs ) [source] #
拠点:
ContourSet
三角形グリッドの等高線または塗りつぶし領域のセットを作成して保存します。
通常、このクラスはユーザーによって直接インスタンス化されるのではなく、
tricontour
およびによってインスタンス化されますtricontourf
。- 属性:
- 斧
Axes
等高線が描画される Axes オブジェクト。
- のコレクション
silent_list
_PathCollection
Artist
輪郭を表す s 。PathCollection
これは、線と塗りつぶされた等高線の両方の のリストです 。- レベル配列
コンター レベルの値。
- レイヤー配列
等高線のレベルと同じ。塗りつぶされた等高線のレベルの中間。を参照してください
ContourSet._process_colors
。
- 斧
キーワードargfilledが False (デフォルト) か Trueかに応じて、三角形のグリッド等高線または塗りつぶされた領域を描画します。
初期化子の最初の引数は
Axes
オブジェクトでなければなりません。残りの引数とキーワード引数は、 の docstring で説明されていtricontour
ます。
- クラス matplotlib.tri。TriFinder (三角形分割) [ソース] #
(x, y) 点が存在する Triangulation の三角形を見つけるために使用されるクラスの抽象基本クラス。
通常、TriFinder から派生したクラスのオブジェクトをインスタンス化するよりも、関数を使用する方が適切です
Triangulation.get_trifinder
。派生クラスは __call__(x, y) を実装します。ここで、x と y は同じ形状の配列のような点座標です。
- クラス matplotlib.tri。TrapezoidMapTriFinder (三角測量) [ソース] #
拠点:
TriFinder
TriFinder
M. de Berg、M. van Kreveld、M. Overmars、および O. Schwarzkopf による本「Computational Geometry, Algorithms and Applications」第 2 版の台形マップ アルゴリズムを使用して実装されたクラス。三角形分割は有効である必要があります。つまり、重複する点、同一線上にある点から形成された三角形、または重なり合う三角形があってはなりません。アルゴリズムには、同一線上にある点から形成される三角形に対してある程度の許容範囲がありますが、これに依存するべきではありません。
- クラス matplotlib.tri。TriInterpolator ( triangulation , z , trifinder = None ) [source] #
三角グリッドの補間に使用されるクラスの抽象基本クラス。
派生クラスは、次のメソッドを実装します。
__call__(x, y)
ここで、x、y は同じ形状の配列のような点座標であり、補間された z 値を含む同じ形状のマスクされた配列を返します。gradient(x, y)
ここで、x、y は同じ形状の配列のような点座標であり、補間器の 2 つの導関数 (x と y に関して補間された z 値の導関数) を含む、同じ形状の 2 つのマスクされた配列のリストを返します。
- クラス matplotlib.tri。LinearTriInterpolator ( triangulation , z , trifinder = None ) [source] #
-
三角形グリッド上の線形補間。
各三角形は平面で表されるため、点 (x, y) での補間値は (x, y) を含む三角形の平面上にあります。したがって、補間された値は三角形分割全体で連続していますが、それらの一次導関数は三角形間のエッジで不連続です。
- パラメータ:
- 三角測量
Triangulation
補間する三角形分割。
- z (npoints,) 配列のような
グリッド ポイントで定義され、その間を補間する値の配列。
- トリファインダー
TriFinder
、オプション これが指定されていない場合、 Triangulation のデフォルトの TriFinder が呼び出されて使用され
Triangulation.get_trifinder
ます。
- 三角測量
メソッド
`__call__` (x, y)
((x, y) ポイントで補間された値を返します。)
`gradient` (x, y)
((x, y) 点で補間された導関数を返します。)
- 勾配( x , y ) [ソース] #
指定された (x, y) ポイントで補間された導関数を含む 2 つのマスクされた配列のリストを返します。
- パラメータ:
- x, y配列のようなもの
同じ形状と任意の数の次元の x 座標と y 座標。
- 戻り値:
- dzdx、dzdy np.ma.array
xおよびyと同じ形状の 2 つのマスクされた配列。三角形分割の外側の (x, y) 点に対応する値はマスクされます。最初に返される配列には、次の値が含まれます。 \(\frac{\partial z}{\partial x}\)そして2番目のもの \(\frac{\partial z}{\partial y}\).
- クラス matplotlib.tri。CubicTriInterpolator ( triangulation , z , kind = 'min_E' , trifinder = None , dz = None ) [source] #
-
三角形グリッドの 3 次内挿。
1 次元 (セグメント上) では、3 次補間関数は、関数の値とその両端の導関数によって定義されます。これは、関数の値とその 2 つの導関数を各三角形ノードで定義する必要があることを除いて、三角形内の 2D でもほぼ同じです。
CubicTriInterpolator は、ユーザーが提供する各ノードで関数の値を取得し、導関数の値を内部で計算して、スムーズな補間を行います。(特別な機能として、ユーザーは各ノードで導関数の値を課すこともできますが、これは一般的な使用法ではありません。)
- パラメータ:
- 三角測量
Triangulation
補間する三角形分割。
- z (npoints,) 配列のような
グリッド ポイントで定義され、その間を補間する値の配列。
- 種類{'min_E', 'geom', 'user'}, オプション
内挿導関数を計算するための平滑化アルゴリズムの選択 (デフォルトは 'min_E'):
if 'min_E': (デフォルト) 各節点での導関数は、曲げエネルギーを最小化するために計算されます。
if 'geom': 各ノードの導関数は、関連する三角形法線の加重平均として計算されます。速度の最適化 (大規模なグリッド) に使用されます。
'user' の場合: ユーザーが引数dzを提供するため、計算は必要ありません。
- トリファインダー
TriFinder
、オプション 指定しない場合、 Triangulation のデフォルトの TriFinder が呼び出されて使用され
Triangulation.get_trifinder
ます。- 配列ライクのdzタプル (dzdx、dzdy)、オプション
kind ='user' の場合にのみ使用されます。この場合、dzは (dzdx, dzdy) として指定する必要があります。ここで、dzdx、dzdy はzと同じ形状の配列であり、三角点での内挿 1 次導関数です。
- 三角測量
ノート
このメモは少し技術的で、3 次補間がどのように計算されるかを詳しく説明しています。
補間は、三角測量メッシュの Clough-Tocher 分割方式に基づいています(わかりやすくするために、グリッドの各三角形は 3 つの子三角形に分割され、各子三角形で補間された関数は 2 の 3 次多項式です)。座標)。この手法は、FEM (有限要素法) 解析に由来します。使用される要素は、削減された Hsieh-Clough-Tocher (HCT) 要素です。その形状関数は[1]で説明されています。アセンブルされた関数は、C1-smooth であることが保証されます。つまり、連続であり、その 1 次導関数も連続です (これは、三角形の内側で簡単に示されますが、エッジを交差する場合にも当てはまります)。
デフォルトのケース ( kind ='min_E') では、内挿は、HCT 要素の形状関数によって生成される関数空間上の曲率エネルギーを最小化します。値は課せられますが、各ノードで任意の導関数が使用されます。最小化汎関数は、いわゆる全曲率の積分です ( [2]のアルゴリズムに基づく実装- PCG スパース ソルバー)。
\[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\]ユーザーがcase kind ='geom' を選択すると、単純な幾何学的近似 (三角形の法線ベクトルの加重平均) が使用され、非常に大きなグリッドで速度が向上する可能性があります。
参考文献
[ 1 ]Michel Bernadou、Kamal Hassan、「一般的な Hsieh-Clough-Tocher 三角形の基底関数、完全または削減」、International Journal for Numerical Methods in Engineering、17(5):784 - 789. 2.01.
[ 2 ]CT Kelley、「最適化のための反復法」。
メソッド
`__call__` (x, y)
((x, y) ポイントで補間された値を返します。)
`gradient` (x, y)
((x, y) 点で補間された導関数を返します。)
- 勾配( x , y ) [ソース] #
指定された (x, y) ポイントで補間された導関数を含む 2 つのマスクされた配列のリストを返します。
- パラメータ:
- x, y配列のようなもの
同じ形状と任意の数の次元の x 座標と y 座標。
- 戻り値:
- dzdx、dzdy np.ma.array
xおよびyと同じ形状の 2 つのマスクされた配列。三角形分割の外側の (x, y) 点に対応する値はマスクされます。最初に返される配列には、次の値が含まれます。 \(\frac{\partial z}{\partial x}\)そして2番目のもの \(\frac{\partial z}{\partial y}\).
- クラス matplotlib.tri。TriRefiner (三角測量) [ソース] #
メッシュ リファインメントを実装するクラスの抽象基本クラス。
TriRefiner は Triangulation オブジェクトをカプセル化し、メッシュの改良と補間のためのツールを提供します。
派生クラスは以下を実装する必要があります。
refine_triangulation(return_tri_index=False, **kwargs)
ここで、オプションのキーワード引数kwargsは、各 TriRefiner 具象実装で定義され、次を返します。洗練された三角形分割、
オプションで ( return_tri_indexに応じて)、洗練された三角形分割の各ポイント: それが属する最初の三角形分割の三角形のインデックス。
refine_field(z, triinterpolator=None, **kwargs)
、 どこ:ベース三角形分割ノードで定義されたフィールド値のz配列 (絞り込むため)、
triinterpolatorはオプションです
TriInterpolator
。その他のオプションのキーワード引数kwargsは、各 TriRefiner 具象実装で定義されます。
これは、(タプルとして) 洗練された三角形メッシュと、洗練された三角形分割ノードでのフィールドの補間値を返します。
- クラス matplotlib.tri。UniformTriRefiner (三角測量) [ソース] #
拠点:
TriRefiner
再帰的な再分割による均一なメッシュの改良。
- パラメータ:
- 三角測量
Triangulation
カプセル化された三角形分割 (改良予定)
- 三角測量
- rename_field ( z , triinterpolator = None , subdiv = 3 ) [ソース] #
カプセル化された三角形分割で定義されたフィールドを絞り込みます。
- パラメータ:
- z (npoints,) 配列のような
カプセル化された三角形分割のノードで定義された、絞り込むフィールドの値。(
n_points
は最初の三角形分割の点の数です)- triinterpolator
TriInterpolator
、オプション フィールド補間に使用される補間器。指定しない場合は、a
CubicTriInterpolator
が使用されます。- サブディビジョンint、デフォルト: 3
サブディビジョンの再帰レベル。
4**subdiv
各三角形は子三角形に分割されます。
- 戻り値:
- refi_tri
Triangulation
返された洗練された三角形分割。
- refi_z長さの 1D 配列: refi_triノード数。
返された補間フィールド ( refi_triノード)。
- refi_tri
- rename_triangulation ( return_tri_index = False ,サブディビジョン= 3 ) [source] #
カプセル化された の均一に洗練された三角形分割refi_triangulation
triangulation
を計算します。この関数は、各親三角形をエッジの中間ノード上に構築された 4 つの子サブ三角形に分割し、サブディビジョン時間を再帰することにより、カプセル化された三角形分割を改良します。
4**subdiv
最終的に、各三角形は子三角形に分割されます。- パラメータ:
- return_tri_index bool、デフォルト: False
各ポイントの親三角形インデックスを示すインデックス テーブルが返されるかどうか。
- サブディビジョンint、デフォルト: 3
サブディビジョンの再帰レベル。
4**subdiv
各三角形は子三角形に分割されます。したがって、デフォルトでは、最初の三角形分割の三角形ごとに 64 個の洗練された部分三角形が生成されます。
- 戻り値:
- refi_triangulation
Triangulation
洗練された三角測量。
- found_index int 配列
refi_triangulationの各点に対する、三角形を含む初期三角形分割のインデックス。return_tri_indexが True に設定されている場合にのみ返されます。
- refi_triangulation
- クラス matplotlib.tri。TriAnalyzer (三角測量) [ソース] #
三角メッシュの解析と改善のための基本的なツールを定義します。
TriAnalyzer は
Triangulation
オブジェクトをカプセル化し、メッシュ解析とメッシュ改善のための基本的なツールを提供します。- パラメータ:
- 三角測量
Triangulation
分析するカプセル化された三角形分割。
- 三角測量
- 属性:
scale_factors
三角形分割を単位正方形に再スケーリングする係数。
- circle_ratios ( rescale = True ) [ソース] #
三角測量の三角形の平坦度の尺度を返します。
外接円半径に対する内接半径の比率は、三角形の平坦度の指標として広く使用されています。それは常に正三角形のみです。0.01 未満の円の比率は、非常に平らな三角形を示します。
<= 0.5
== 0.5
2 軸間のスケールの違いによる過度に低い値を回避するために、三角形のメッシュを最初に再スケールして単位正方形内に収まるようにすることができます(再スケールが True の
scale_factors
場合のみ、これはデフォルト値です)。- パラメータ:
- rescale bool、デフォルト: True
scale_factors
True の場合、(マスクされていない) 三角形が単位正方形メッシュ内に正確に収まるように( に基づいて) 内部的に再スケーリングします。
- 戻り値:
- マスクされた配列
カプセル化された三角形分割の「再スケーリング」された三角形ごとに、外接円半径に対する内接円半径の比率。マスクされた三角形に対応する値はマスクされます。
- get_flat_tri_mask ( min_circle_ratio = 0.01 , rescale = True ) [source] #
三角形分割から過度に平坦な境界三角形を削除します。
カプセル化された三角形分割をその境界に位置する平面三角形から消去できるようにするマスクnew_mask
circle_ratios()
を返します (その に従って)。このマスクは、後で を使用して三角形分割に適用されることを意図していますTriangulation.set_mask
。 new_maskは、最初にマスクされた三角形がマスクされたままになるという意味で、最初の三角形分割マスクの拡張です。new_mask配列は再帰的に計算されます。各ステップで、現在のメッシュ境界と辺を共有している場合にのみ、平らな三角形が削除されます。したがって、三角形化された領域に新しい穴は作成されません。
- パラメータ:
- min_circle_ratio float、デフォルト: 0.01
r/R < min_circle_ratio の場合、内円/外円半径比 r/R を持つ境界三角形は削除されます。
- rescale bool、デフォルト: True
scale_factors
True の場合、最初に(マスクされていない) 三角形が単位正方形メッシュ内に正確に収まるように( に基づいて) 内部的に再スケーリングします。この再スケーリングは、2 つの軸の間に存在する可能性のあるスケールの違いを考慮します。
- 戻り値:
- ブール値の配列
カプセル化された三角形分割に適用するマスク。最初にマスクされたすべての三角形は、 new_maskでマスクされたままになり ます。
ノート
この関数の背後にある理論的根拠は、(構造化されていない一連の点の) Delaunay 三角形分割には、境界にほぼ平らな三角形が含まれていることがあり、プロットにアーティファクトが発生することがあります (特に高解像度の等高線の場合)。計算されたnew_maskでマスクされると、カプセル化された三角形分割には、 min_circle_ratioを下回る円比率のマスクされていない境界三角形が含まれなくなり、後続のプロットまたは補間のメッシュ品質が向上します。
- プロパティ scale_factors #
三角形分割を単位正方形に再スケーリングする係数。
- 戻り値:
- (浮く、浮く)
三角測量が単位正方形内に正確に収まるように倍率 (kx, ky) を調整し ます。
[triangulation.x * kx, triangulation.y * ky]