Дискретный градиент?

Aug 22 2020

Я пытаюсь понять, как получить дискретный градиент сетки, которая используется в качестве входных данных некоторой функции. $f$. Другими словами, для каждой вершины$v$ есть скалярная величина $s$ связанные с ним.

Я пытаюсь понять, как вычислить дискретный градиент $f$на поверхности. Для этого я проверял эти слайды:

http://www.hao-li.com/cs599-ss2015/slides/Lecture04.1.pdf

Но не щелкает. Я предполагаю, что кусочная нотация - это просто попытка формализовать «мы не знаем, какими будут значения в треугольниках, поэтому мы просто собираемся линейно интерполировать с использованием барицентрических координат».

Но затем слайды достигают этой окончательной формулы градиента:

Я вроде понимаю нижнюю часть, которая, кажется, говорит о градиентной основе на $i$ вектор, ортогональный противоположному краю, деленный на 2-кратную площадь треугольника (я предполагаю), но как была получена верхняя формула?

Ответы

1 NathanReed Sep 23 2020 at 01:06

Он определяет градиент в терминах барицентрических координат. Это похоже на вывод в этом ответе , только немного переставил алгебраически, используя тот факт, что сумма трех барицентрических координат равна одной.$$ \begin{aligned} f(\mathbf{u}) &= f_i B_i(\mathbf{u}) + f_j B_j(\mathbf{u}) + f_k B_k(\mathbf{u}) \\ &= f_i (1 - B_j(\mathbf{u}) - B_k(\mathbf{u})) + f_j B_j(\mathbf{u}) + f_k B_k(\mathbf{u}) \\ &= f_i + (f_j - f_i) B_j(\mathbf{u}) + (f_k - f_i) B_k(\mathbf{u}) \\ \nabla f(\mathbf{u}) &= (f_j - f_i) \nabla B_j(\mathbf{u}) + (f_k - f_i) \nabla B_k(\mathbf{u}) \\ \end{aligned} $$

xer-rex Aug 22 2020 at 14:42

Область состоит из 2 компонентов, нормализованный градиент base_i дает постоянную скорость в направлении одного из компонентов, который зависит только от вершин.

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