Main Content

使用特定 Delaunay 三角剖分的插值

使用 delaunayTriangulation 查询的最近邻点插值

此示例说明如何使用特定 Delaunay 三角剖分对一组散点执行最近邻点插值。

创建一组二维散点的 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]);

使用三角剖分 DTV 执行最近邻点插值。使用 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 三角剖分对一组散点执行线性插值。

可以使用 triangulationpointLocation 方法计算查询点的封闭三角形和顶点权重的模。该权重称为重心坐标,表示单位体的一部分。即,三个权重的和等于 1。函数 V 在查询点处的插值是 V 在三个顶点处的加权值之和。即,如果函数在三个顶点处具有值 V1、V2、V3,且权重为 B1、B2、B3,则插值为 (V1)(B1) + (V2)(B2) + (V3)(B3)。

创建一组二维散点的 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

另请参阅

| |

相关主题