В этом примере показано, как выполнить интерполяцию ближайшего соседа на рассеянном наборе точек с помощью определенной Триангуляции Делоне.
Создайте delaunayTriangulation
из набора рассеянных точек в 2D.
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
из набора рассеянных точек в 2D.
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