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

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

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

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

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

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

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

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

| |

Похожие темы