Main Content

特定の 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

参考

| |

関連するトピック