Содержание

§ 6. Интерполяция на нерегулярной сетке

Интерполяция в барицентрических координатах

Барицентрическими координатами называется тройка чисел (t1,t2,t3)(t_1,t_2,t_3), которые соответствуют массам, расположенных в вершинах треугольника. Если сумма этих координат равна единице, то они называются однородными и однозначно определяют координаты точки внутри треугольника:

r=t1r1+t2r2+t3r3\vec{r} = t_1\vec{r}_1 + t_2\vec{r}_2 + t_3\vec{r}_3

Здесь r1,2,3\vec{r}_{1,2,3} — это декартовы координаты вершин треугольника. Барицентрические координаты вершин треугольника равны (1,0,0)(1,0,0), (0,1,0)(0,1,0), (0,0,1)(0,0,1) соответственно. Из-за того что сумма однородных барицентрических координат равна единице, третья координата всегда зависит от остальных.

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

f(r)t1f(r1)+t2f(r2)+t3f(r3).f(\vec{r}) \approx t_1 f(\vec{r}_1) + t_2 f(\vec{r}_2) + t_3 f(\vec{r}_3).

Для вычисления барицентрических координат точки по декартовым координатам вершин используется система уравнений

[111x1x2x3y1y2y3][t1t2t3]=[1xy],\left[\begin{array}{lll} 1 & 1 & 1 \\ x_1 & x_2 & x_3 \\ y_1 & y_2 & y_3 \\ \end{array}\right] \left[\begin{array}{l}t_1\\t_2\\t_3\end{array}\right] = \left[\begin{array}{l}1\\x\\y\end{array}\right],

решение которой записывается как

t1=1d((y2y3)(xx3)+(x3x2)(yy3)),t2=1d((y3y1)(xx3)+(x1x3)(yy3)),t3=1t1t2,d=(y2y3)(x1x3)+(x3x2)(y1y3).t_1 = \frac{1}{d}\left((y_2-y_3)(x-x_3) + (x_3-x_2)(y-y_3)\right), \\ t_2 = \frac{1}{d}((y_3-y_1)(x-x_3) + (x_1-x_3)(y-y_3)), \\ t_3 = 1 - t_1 - t_2, \\ d = (y_2-y_3)(x_1-x_3) + (x_3-x_2)(y_1-y_3).

Барицентрические координаты обобщаются на тетраэдры путем добавления координаты zz и коорданты t4t_4 в вышеописанные уравнения. После этого координаты (t1,t2,t3,t4)(t_1,t_2,t_3,t_4) однозначно описывают положение точки внутри тетраэдра.

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

Интерполяция методом ближайших соседей

Для нерегулярных сеток (облаков точек) применяют методы, основанные на поиске nn ближайших соседних точек и вычислении на их основе взвешенного среднего значения функции в заданной точке.

f(x)i=1nwif(xi).f(\vec{x}) \approx \sum\limits_{i=1}^{n} w_i f(\vec{x}_i).

В качестве весовой функции используют обратное расстояние:

wi=xxip,p1.w_i=\left|\vec{x}-\vec{x}_i\right|^{-p}, \quad p \geq 1.

Интерполяция радиально-базисными функциями

В данном методе функция интерполируется с помощью взвешенной суммы радиально-базисных функций.

f(x)i=1nwiϕ(xxi).f(\vec{x}) \approx \sum\limits_{i=1}^{n} w_i \phi(|\vec{x}-\vec{x}_i|).

Радиально-базисной функцией называется функция, которая зависит от расстояния от точки x\vec{x} до какой-либо фиксированной точки. В данном методе в качестве фиксированных точек выбираются nn ближайших соседей. Веса определяются из системы уравнений

[1ϕ(x2x1)ϕ(xnx1)ϕ(x1x2)1ϕ(xnx2)ϕ(x1xn)1][w1w2wn]=[f(x1)f(x2)f(xn)].\left[\begin{array}{llll} 1 & \phi(|\vec{x}_2-\vec{x}_1|) & \ldots & \phi(|\vec{x}_n-\vec{x}_1|) \\ \phi(|\vec{x}_1-\vec{x}_2|) & 1 & \ldots & \phi(|\vec{x}_n-\vec{x}_2|) \\ \vdots & \vdots & \ddots & \vdots \\ \phi(|\vec{x}_1-\vec{x}_n|) & \ldots & \ldots & 1 \\ \end{array} \right] \left[\begin{array}{l}w_1\\w_2\\\vdots\\w_n\end{array}\right] = \left[\begin{array}{l} f(\vec{x}_1)\\f(\vec{x}_2)\\\vdots\\f(\vec{x}_n) \end{array}\right].

Как правило, количество ближайших соседей фиксировано и невелико, а это значит, что для системы можно получить решение в явном виде.

В качестве радиально-базисной функции в зависимости от задачи выбирают

Задания

Барицентрические координаты1 балл

Перед вами поверхность, заданная дискретно массивом 128×128128\times{}128 точек. Напишите программу, которая вычисляет координату zz поверхности в любой точке (x,y)(x,y) внутри поверхности с помощью барицентрической интерполяции. Для этого разделите поверхность на прямоугольные области (сетку), а каждый прямоугольник на два треугольника. Затем используйте один из треугольников для интерполяции. Проверить себя можно с помощью программы Gnuplot.

splot 'surface.xyz' # нарисовать поверхность
splot 'surface.xyz', 'mypoints.xyz' # нарисовать поверхность + интерполированные точки

Радиально-базисные функции2 балла

Выполните первое задание, используя интерполяцию радиально-базисными функциями по четырем точкам, которые обрамляют прямоугольник, в который попала интерполируемая точка. Веса можно вычислить как численно, так и аналитически (с помощью Mathics). В качестве радиально-базисной функции можно использовать любую подходящую функцию.

Точки пересечения сложных фигур (3D)3 балла

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

Видео

2023

  • 00:00 Интерполяция в барицентрических координатах.
  • 07:30 Метод ближайших соседей.
  • 13:20 Методом радиально-базисных функций.
  • 22:16 Задания.
Запись лекции 24.03.2022.

2022

  • 00:00 Введение.
  • 01:28 Интерполяция в барицентрических координатах.
  • 08:40 Метод ближайших соседей.
  • 12:30 Методом радиально-базисных функций.
  • 17:16 Заключение.
  • 19:12 Задания.
Запись лекции 24.03.2022.

Доска

2023

interpolation-irregular-grid-2023 thumbnail.
Запись доски 24.03.2022.

2022

interpolation-irregular-grid thumbnail.
Запись доски 24.03.2022.
interpolation-irregular-grid-2 thumbnail.
Запись доски 26.03.2022.