В этом примере показано, как выполнить интерполяцию ближайшего соседа на рассеянном наборе точек с помощью определенной Триангуляции Делоне.
Создайте delaunayTriangulation
из набора рассеянных точек в 2D.
P = -2.5 + 5*gallery('uniformdata',[50 2],0);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [87x3 double] Constraints: []
Произведите параболическую функцию, V (x, y), в точках, заданных в P
.
V = P(:,1).^2 + P(:,2).^2;
Определите 10 случайных точек запроса.
Pq = -2 + 4*gallery('uniformdata',[10 2],1);
Выполните интерполяцию ближайшего соседа на V
с помощью триангуляции, DT
. Используйте nearestNeighbor
найти индексы вершин ближайшего соседа, vi
, для набора точек запроса, Pq
. Затем исследуйте определенные значения V
в индексах.
vi = nearestNeighbor(DT,Pq); Vq = V(vi)
Vq = 10×1
5.3163
0.3453
4.3026
1.2579
1.9435
5.9194
3.9030
0.4172
11.7282
0.8641
В этом примере показано, как выполнить линейную интерполяцию на рассеянном наборе точек с определенной Триангуляцией Делоне.
Можно использовать triangulation
метод, pointLocation
, вычислить треугольник включения точки запроса и величины весов вершины. Веса называются барицентрическими координатами, и они представляют раздел единицы. Таким образом, сумма этих трех весов равняется 1. Интерполированное значение функции, V, в точке запроса является суммой взвешенных значений V в этих трех вершинах. Таким образом, если функция имеет значения, V1, V2, V3 в этих трех вершинах, и веса являются B1, B2, B3, то интерполированное значение (V1)(B1) + (V2)(B2) + (V3)(B3).
Создайте delaunayTriangulation
из набора рассеянных точек в 2D.
P = -2.5 + 5*gallery('uniformdata',[50 2],0);
DT = delaunayTriangulation(P)
DT = delaunayTriangulation with properties: Points: [50x2 double] ConnectivityList: [87x3 double] Constraints: []
Произведите параболическую функцию, V (x, y), в точках в P
.
V = P(:,1).^2 + P(:,2).^2;
Определите 10 случайных точек запроса.
Pq = -2 + 4*gallery('uniformdata',[10 2],1);
Найдите треугольник, который заключает каждую точку запроса с помощью 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
5.9456
1.1222
4.7963
0.9373
2.3533
3.4219
2.3104
0.7728
8.0479
1.0886
delaunayTriangulation
| nearestNeighbor
| pointLocation