Интерполяция с использованием определенной триангуляции Делоне

Интерполяция по ближайшему соседу с использованием запроса delaunayTriangulation

В этом примере показано, как выполнить интерполяцию по ближайшему соседу на рассеянном наборе точек с помощью определенной триангуляции Делоне.

Создайте 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

Линейная интерполяция с использованием запроса delaunayTriangulation

В этом примере показано, как выполнить линейную интерполяцию на рассеянном наборе точек с определенной триангуляцией Делоне.

Можно использовать 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

См. также

| |

Похожие темы