特定の Delaunay 三角形分割を使用した内挿
delaunayTriangulation クエリを使用した最近傍内挿
この例では、特定の Delaunay 三角形分割を使用して、散布点の集合で最近傍内挿を実行する方法を説明します。
2 次元で散布点の集合の delaunayTriangulation
を作成します。
rng('default')
P = -2.5 + 5*rand([50 2]);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [84x3 double] Constraints: []
P
で指定された点で放物線関数 V(x,y) をサンプリングします。
V = P(:,1).^2 + P(:,2).^2;
無作為に 10 個のクエリ点を定義します。
Pq = -2 + 4*rand([10 2]);
三角形分割 DT
を使用して、V
で最近傍内挿を実行します。nearestNeighbor
を使用して、クエリ点の集合 Pq
の最近傍頂点のインデックス vi
を求めます。次に、このインデックスにおける V
の特定の値を調べます。
vi = nearestNeighbor(DT,Pq); Vq = V(vi)
Vq = 10×1
2.7208
3.7792
1.8394
3.5086
1.8394
3.5086
1.4258
5.4053
4.0670
0.5586
delaunayTriangulation クエリを使用した線形内挿
この例では、特定の Delaunay 三角形分割を使用して、散布点の集合で線形内挿を実行する方法を説明します。
triangulation
メソッド pointLocation
を使用して、クエリ点を囲む三角形と、頂点重みの大きさを計算します。この重みは重心座標と呼ばれ、1 の分割を表します。すなわち、3 つの重みの和は 1 になります。クエリ点における関数 V の内挿値は、3 つの頂点における V の重み値の和です。つまり、この関数が 3 つの頂点において V1、V2、V3 の値をもち、その重みがそれぞれ B1、B2、B3 であった場合、内挿値は (V1)(B1) + (V2)(B2) + (V3)(B3) となります。
2 次元で散布点の集合の delaunayTriangulation
を作成します。
rng('default')
P = -2.5 + 5*rand([50 2]);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [84x3 double] Constraints: []
P
の点で放物線関数 V(x,y) をサンプリングします。
V = P(:,1).^2 + P(:,2).^2;
無作為に 10 個のクエリ点を定義します。
Pq = -2 + 4*rand([10 2]);
pointLocation
メソッドを使用して、各クエリ点を囲む三角形を求めます。以下のコードでは、ti
には点を囲む三角形の ID が含まれ、bc
には各三角形に関連付けられた重心座標が含まれます。
[ti,bc] = pointLocation(DT,Pq);
点を囲む各三角形の頂点で、V(x,y) の値を求めます。
triVals = V(DT(ti,:));
ドット積を使用して V(x,y) の重み値の和を計算します。
Vq = dot(bc',triVals')'
Vq = 10×1
2.2736
4.2596
2.1284
3.5372
4.6232
2.1797
1.2779
4.7644
3.6311
1.2196
参考
delaunayTriangulation
| pointLocation
| nearestNeighbor