Расчет производных величин в 2D и 3D сетках

Я новичок в физике игр. У меня проблема, когда у меня есть 2D или 3D сетка. Вычислительные ячейки представляют собой треугольники или тетраэдры соответственно. Определенные физические величины, такие как плотность и энергия, даны в клеточных центрах как средние по центру клетки. Мне нужно вычислить градиент этих величин в центре всех ячеек сетки.

Я понимаю, что в 1D производная величины в ячейке (i) может быть рассчитана путем деления разности значений этой величины в соседних ячейках (i+1,i-1) на расстояние между ними (центральная разница формула). Что я не понимаю, так это решить эту проблему на произвольной 2D или 3D сетке?

Могу ли я получить ссылку на некоторую литературу, где я могу получить такие численные методы / алгоритмы?

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

4 ответа

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

Производной многовариантной функции является вектор. Для простоты предположим, что мы имеем дело с 2d-сеткой, тогда производная является 2d-вектором. Чтобы упростить ситуацию, давайте возьмем производную в позиции (x, y) = (0,0). Чтобы начать, вы должны идентифицировать все соседние ячейки с их центрами (x1,y1), (x2,y2)... и значениями z1, z2,.... При желании вы можете назначить (неотрицательный) вес каждому из них, в зависимости от расстояния, например, например, wk=(d*d - xk*xk - yk*yk) с d максимальным расстоянием смежных ячеек, которое следует учитывать здесь, Затем вы аппроксимируете все эти смежные значения, используя линейную регрессию: z = vx * x + vy * y + z0. Значения vx, vy, z0 получены методом наименьших квадратов:

свернуть Sum_k[wk * (zk - vx*xk - vy*yk - z0)^2]

где индекс k перебирает всех соседей. Вектор (vx,vy) - это производная, которую вы ищете.

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

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

Теперь это звучит не очень полезно, я знаю, и я не могу действительно объяснить все это очень хорошо в данном месте. Но если вы хотите сделать себе одолжение, читайте о внешнем исчислении. Поначалу это может звучать немного пугающе, но это сделает вашу жизнь намного проще, быстрее.

Попробуйте Google, или начните следующие ссылки здесь: http://arxiv.org/abs/1103.3076

Другие вопросы по тегам