我不能完全理解有限差分法



我是一名学习DirectX 11的学生。要计算曲面的法向量,我知道我需要得到两个切线向量来计算叉积。但如果有曲面方程,我可以做到。

如果我不知道曲面的方程/公式,我必须用有限差分法得到法向量的近似值。下面的代码来自我正在读的书。

for(UINT i = 1; i < mNumRows-1; ++i)
{
for(UINT j = 1; j < mNumCols-1; ++j)
{
float l = mCurrSolution[i*mNumCols+j-1].y;
float r = mCurrSolution[i*mNumCols+j+1].y;
float t = mCurrSolution[(i-1)*mNumCols+j].y;
float b = mCurrSolution[(i+1)*mNumCols+j].y;
mNormals[i*mNumCols+j].x = -r+l;
mNormals[i*mNumCols+j].y = 2.0f*mSpatialStep;
mNormals[i*mNumCols+j].z = b-t;
XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&mNormals[i*mNumCols+j]));
XMStoreFloat3(&mNormals[i*mNumCols+j], n);
}
}

我不明白为什么值-r+lb-t(y值的差(分别变成法向量的x值和z值。我想知道为什么2.0f * mSpatialStep也是y值。

导数通过Ft ~ (F(t+step) - F(t-step))/ (2 step)进行数值估计。观察给定的法向量如何与y = - F(x, z)(即(Fx, 1, Fz)(的梯度估计成比例。

相关内容

  • 没有找到相关文章

最新更新