Расчет градиента тетраэдрической сетки

Aug 26 2020

Как я могу вычислить градиент для тетраэдрической сетки (3D)? Для треугольной сетки я получил ответ из следующего поста Расчет градиента треугольной сетки

Как получить аналогичную формулу для 3D-сетки?

Заранее спасибо.

Ответы

1 NathanReed Aug 30 2020 at 13:31

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

Линейная интерполяция может быть выражена с использованием барицентрических координат, например $$ f(x,y,z) = f_1 w_1(x,y,z) + f_2 w_2(x,y,z) + f_3 w_3(x,y,z) + f_4 w_4(x,y,z) $$ где $f_1 \ldots f_4$ - значения функции в четырех вершинах, а $w_1 \ldots w_4$- барицентрические веса каждой вершины. Затем, найдя градиент$f$ сводится к нахождению градиентов всех весов.

Это можно решить геометрически, отметив, что каждый $w_i$ равен 1 в $i$-я вершина, спадающая до 0 в плоскости, образованной тремя другими вершинами. Таким образом, вектор градиента будет перпендикулярен этой плоскости и направлен назад к$i$-я вершина, с величиной, равной 1 / расстоянию от плоскости до вершины.

После того, как вы рассчитали эти барицентрические градиенты, вы можете умножить их на $f_1 \ldots f_4$ и просуммируем их, чтобы получить градиент $f$ в общем и целом.

Это рассуждение работает и для треугольников, кстати, только замените «плоскость» на «линию».