C 计算二维和三维网格中量的导数

C 计算二维和三维网格中量的导数,c,simulation,computational-geometry,game-physics,mesh,C,Simulation,Computational Geometry,Game Physics,Mesh,我对游戏物理学还不熟悉。我有一个问题,我有一个二维或三维网格。计算单元分别为三角形和四面体。某些物理量,如密度和能量,在细胞中心作为细胞中心的平均值给出。我需要计算网格中所有单元中心这些量的梯度 我知道在1D中,单元格(I)中某个量的导数可以通过将相邻单元格(I+1,I-1)中该量的差值除以它们之间的距离来计算(中心差分公式)。我不明白的是在任意2D或3D网格上解决这个问题 我可以参考一些文献,在那里我可以得到这样的数值方法/算法吗 提前感谢。网格中多边形的导数是多边形的平面,如果你需要更精细,

我对游戏物理学还不熟悉。我有一个问题,我有一个二维或三维网格。计算单元分别为三角形和四面体。某些物理量,如密度和能量,在细胞中心作为细胞中心的平均值给出。我需要计算网格中所有单元中心这些量的梯度

我知道在1D中,单元格(I)中某个量的导数可以通过将相邻单元格(I+1,I-1)中该量的差值除以它们之间的距离来计算(中心差分公式)。我不明白的是在任意2D或3D网格上解决这个问题

我可以参考一些文献,在那里我可以得到这样的数值方法/算法吗


提前感谢。

网格中多边形的导数是多边形的平面,如果你需要更精细,那么可以用几种不同的方法来进行,你可以通过对相邻多边形进行平均和加权来估计它。

你也永远不知道如何计算这种导数,因为从技术上讲,这是不可能的。您只能将单元格上的真正离散导数插值回单元格,但这里没有定义它

我知道,这听起来不是很有帮助,在这里我不能很好地解释这一切。但如果你想帮自己一个忙,请阅读离散外部微积分。乍一看,这听起来可能有点吓人,但它会让你的生活变得更加轻松、快速


试试谷歌,或者在这里开始以下参考:

是一个很好的开始,当考虑网格上的微分运算符时。它不会进入体积网格(如果我记得的话),但这是一个好的开始。特别是,本文提出了一种从离散微分几何角度(DDG)在顶点处指定梯度的合理选择,从DDG可以使用重心坐标计算面内部的梯度场。

多变量函数的导数是向量。为简单起见,假设我们处理的是2d网格,那么导数是2d向量。为了进一步简化,让我们在位置(x,y)=(0,0)处求导数。要开始,您必须识别所有相邻单元,其中心(x1,y1)、(x2,y2)…和值z1,z2,…。可选地,可以根据它们的距离分配一个(非负)权重,例如,如强> WK=(d*-dk*xk-yk*yk)><强> d这里要考虑的相邻细胞的最大距离。然后使用线性回归来近似所有这些相邻值:z=vx*x+vy*y+z0vx、vy、z0的值通过最小二乘回归得到:

最小化求和[wk*(zk-vx*xk-vy*yk-z0)^2]


其中索引k迭代所有邻居。向量(vx,vy)是你要找的导数。

我不是指多边形的导数,我是指计算密度和能量等量的导数,对于已在单元格中心定义的值。也许您应该更改搜索参数以查找插值…您可以根据需要将其设置为简单或复杂。比如,如果你有一个点a,你想估计一些属性P,你可以尝试做一个非常简单的算法,添加相邻节点l,m,n的属性。。。乘以表示所有采样节点的总距离的倒数的比例因子。如果我要量化这些导数的准确度,我将这些导数称为“二阶准确度”会是错误的吗?这是“加权最小二乘估计”吗?为什么“权重”不是这项工作的平方根呢