球谐函数的概念与应用:可视化理解傅里叶级数

球谐函数的概念与应用:可视化理解傅里叶级数

傅里叶级数

在谈及球谐函数时,从傅里叶级数开始理解,会有非常好的体验。从球谐函数的定义出发:球面函数可以分解为无限个球谐函数的累加。阶数越高,逼近的效果越好。而傅里叶级数的定义是,任意的周期函数都可以由简单震荡的无限叠加获得。当然,我们在实际计算机中都是用有限个数去逼近。

我们直接引入傅里叶级数的公式:

\large c_{n}=\int _{0}^{1}e^{-2\pi int}f(t)dt

其中\large c_{n}是 每一项的系数。\large f(t)是我们想要逼近的函数。当我们用趋于无限的正弦波叠加去逼近一个周期函数时,其过程如下图所示:

球谐函数的概念与应用:可视化理解傅里叶级数_第1张图片

引入欧拉公式:

\large e^{it}=cos(t)+isin(t)

该复指数可以让我们更清晰的观察傅里叶级数在二维图形中的逼近效果。复指数随时间t的变化如下图所示:

球谐函数的概念与应用:可视化理解傅里叶级数_第2张图片

如果我们取许多的复指数。它们有系数\large c_{n},该系数表示了圆的半径,指数的n表示了旋转的频率。

球谐函数的概念与应用:可视化理解傅里叶级数_第3张图片

利用傅里叶级数重构函数:
\small f'(t)=\sum_{n=-N}^{N} c_{n}e^{2\pi int}

f'(t)为我们重构的函数。当N趋于∞时,f'(t)=f(t)。使用其所有的复指数向量来重构的二维图案如下图所示:

球谐函数的概念与应用:可视化理解傅里叶级数_第4张图片

因此可以将函数\large f(t)分解成足够多的复指数项,利用它们的向量和来重现该函数。n的个数越多,重现的函数越准确。那么我们如何获得每个项的系数\large c_{n}呢?

我们可以发现上图的\large f(t)有常数项c_{0}e^{0 \cdot 2\pi it}。该项为一个定点,表示了\large f(t)函数的重心,如下图:

球谐函数的概念与应用:可视化理解傅里叶级数_第5张图片

重心可由下述公式计算:

\large c_{0}=\int _{0}^{1}f(t)dt

从计算\large c_{0},这给了我们计算别的系数的灵感,比如我们要计算\large c_{2}

\large \int _{0}^{1}e^{-2\cdot 2\pi it}f(t)dt

\small =\int _{0}^{1}(\cdots+c_{-1}e^{-3\cdot 2\pi it}+c_{0}e^{-2\cdot 2\pi it}+c_{1}e^{-1\cdot 2\pi it}+c_{2}e^{0\cdot 2\pi it}+\cdots )dt

\small =\cdots +\int _{0}^{1}c_{-1}e^{-3\cdot 2\pi it}dt+\int _{0}^{1}c_{0}e^{-2\cdot 2\pi it}dt+\int _{0}^{1}c_{1}e^{-1\cdot 2\pi it}dt+\int _{0}^{1}c_{2}e^{0\cdot 2\pi it}dt+\cdots

由于复指数在[0,1]区间内的积分始终为0,所以我们可以获得:

\large \int _{0}^{1}e^{-2\cdot 2\pi it}f(t)dt=\int _{0}^{1}c_{2}e^{0\cdot 2\pi it}dt=c_{2}

我们就有了最初的傅里叶级数的计算系数的公式(也正是傅里叶变换):

\large c_{n}=\int _{0}^{1}e^{-2\pi int}f(t)dt

这里我们能从原函数获取系数\large c_{n},n的个数越多,用系数重构的原函数就越准确。\large f(t)则是我们的输入函数(文中的图形可以使用多组分段函数构成),最后我们观察不同的系数个数和重建的效果:

看到这里,我们球谐函数的作用就显而易见了,利用球面原始函数,可以用低阶去模拟环境光以及ao的效果,高阶则可以用来模拟镜面反射等高精度效果。更详细的讲解可以看一下3blue1brown的视频。

你可能感兴趣的:(球谐函数的概念与应用:可视化理解傅里叶级数)