Interpolation Using a Specific Delaunay Triangulation
Nearest-Neighbor Interpolation Using a delaunayTriangulation Query
This example shows how to perform nearest-neighbor interpolation on a scattered set of points using a specific Delaunay triangulation.
Create a delaunayTriangulation
of a set of scattered points in 2-D.
rng('default')
P = -2.5 + 5*rand([50 2]);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [84x3 double] Constraints: []
Sample a parabolic function, V(x,y), at the points specified in P
.
V = P(:,1).^2 + P(:,2).^2;
Define 10 random query points.
Pq = -2 + 4*rand([10 2]);
Perform nearest-neighbor interpolation on V
using the triangulation, DT
. Use nearestNeighbor
to find the indices of the nearest-neighbor vertices, vi
, for the set of query points, Pq
. Then examine the specific values of V
at the indices.
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
Linear Interpolation Using a delaunayTriangulation Query
This example shows how to perform linear interpolation on a scattered set of points with a specific Delaunay triangulation.
You can use the triangulation
method, pointLocation
, to compute the enclosing triangle of a query point and the magnitudes of the vertex weights. The weights are called barycentric coordinates, and they represent a partition of unity. That is, the sum of the three weights equals 1. The interpolated value of a function, V, at a query point is the sum of the weighted values of V at the three vertices. That is, if the function has values, V1, V2, V3 at the three vertices, and the weights are B1, B2, B3, then the interpolated value is (V1)(B1) + (V2)(B2) + (V3)(B3).
Create a delaunayTriangulation
of a set of scattered points in 2-D.
rng('default')
P = -2.5 + 5*rand([50 2]);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [84x3 double] Constraints: []
Sample a parabolic function, V(x,y), at the points in P
.
V = P(:,1).^2 + P(:,2).^2;
Define 10 random query points.
Pq = -2 + 4*rand([10 2]);
Find the triangle that encloses each query point using the pointLocation
method. In the code below, ti
contains the IDs of the enclosing triangles and bc
contains the barycentric coordinates associated with each triangle.
[ti,bc] = pointLocation(DT,Pq);
Find the values of V(x,y) at the vertices of each enclosing triangle.
triVals = V(DT(ti,:));
Calculate the sum of the weighted values of V(x,y) using the dot product.
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
See Also
delaunayTriangulation
| pointLocation
| nearestNeighbor