В этом примере показано, как выполнить интерполяцию ближайшего соседа для рассеянного набора точек с использованием определенной триангуляции Делоне.
Создать delaunayTriangulation набора рассеянных точек в 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: []
Пример параболической функции V (x, y) в точках, указанных вP.
V = P(:,1).^2 + P(:,2).^2;
Определите 10 случайных точек запроса.
Pq = -2 + 4*rand([10 2]);
Выполнить интерполяцию ближайшего соседа на V используя триангуляцию, DT. Использовать nearestNeighbor для поиска индексов вершин ближайшего соседа, vi, для набора точек запроса, Pq. Затем проверьте конкретные значения 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
В этом примере показано, как выполнить линейную интерполяцию для рассеянного набора точек с определенной триангуляцией Делоне.
Вы можете использовать triangulation способ, pointLocation, чтобы вычислить заключительный треугольник точки запроса и величины весов вершин. Веса называются барицентрическими координатами, и они представляют собой раздел единства. То есть сумма трех весов равна 1. Интерполированное значение функции V в точке запроса является суммой взвешенных значений V в трех вершинах. Таким образом, если у функции есть ценности, V1, V2, V3 в этих трех вершинах, и веса - B1, B2, B3, то интерполированная стоимость (V1) (B1) + (V2) (B2) + (V3) (B3).
Создать delaunayTriangulation набора рассеянных точек в 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: []
Пример параболической функции V (x, y) в точках вP.
V = P(:,1).^2 + P(:,2).^2;
Определите 10 случайных точек запроса.
Pq = -2 + 4*rand([10 2]);
Найдите треугольник, который заключает каждую точку запроса, используя pointLocation способ. В приведенном ниже коде ti содержит идентификаторы входящих треугольников и 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
delaunayTriangulation | nearestNeighbor | pointLocation