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