Main Content

使用特定德劳内三角剖分的插值

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

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

创建一组二维散点的 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 查询的线性插值

此示例说明如何使用特定德劳内三角剖分对一组散点执行线性插值。

可以使用 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

另请参阅

| |

相关主题