【问题标题】:I cannot understand Finite Difference Method exactly我无法完全理解有限差分法
【发布时间】:2022-01-04 13:42:03
【问题描述】:

我是一名学习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 值。

【问题讨论】:

    标签: graphics directx numerical-analysis


    【解决方案1】:

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

    【讨论】:

    • 您好,感谢您回答我的问题。我理解代码试图获得梯度向量的近似值。我想知道为什么法线向量的x和z值必须是相邻顶点差的y值之差。是像 ∂y / ∂x 和 ∂y / ∂z 这样的偏差值吗?
    • 我想知道为什么代码使用 - F(x, z) 而不是 F(x, z)。
    • @zhoyic:这正是我的回答。
    • @zhoyic:是的,代码使用 F(x, z),而不是 F(x, z)。
    • 啊..我想知道为什么在 F(x,z) 前面加上减号。为什么不只是 +F(x,z)
    猜你喜欢
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多