Documentation |
On this page… |
---|
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.
P = -2.5 + 5*gallery('uniformdata',[50 2],0);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [87x3 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*gallery('uniformdata',[10 2],1);
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 = 5.3163 0.3453 4.3026 1.2579 1.9435 5.9194 3.9030 0.4172 11.7282 0.8641
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.
P = -2.5 + 5*gallery('uniformdata',[50 2],0);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [87x3 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*gallery('uniformdata',[10 2],1);
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 = 5.9456 1.1222 4.7963 0.9373 2.3533 3.4219 2.3104 0.7728 8.0479 1.0886
delaunayTriangulation | nearestNeighbor | pointLocation