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

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

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

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

Линейная интерполяция Используя Запрос delaunayTriangulation

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

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

Смотрите также

| |

Похожие темы