Java教程

球谐函数

本文主要是介绍球谐函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

勒让德多项式

有一族正交函数是数学领域比较关注的,就是正交多项式(Orthogonal Polynomial)。正交多项式有一些奇妙的特性(或者说其实这个应该是它的定义吧?),这个特性跟正交基函数族类似:

[公式]

特别地,如果 [公式] ,那么这组正交多项式 [公式] 就是标准正交(orthonormal)的。有很多种这样的多项式,例如[4]Chebyshev Polynomial,Jacobi Polynomial,Hermite Polynomial等等。而在球谐光照里面,我们最关心的就是勒让德多项式(Legendre Polynomial),特别是伴随勒让德多项式(Associated Legendre Polynomial,简称ALP吧)。根据wikipedia的说法[6],勒让德函数是勒让德微分方程(Legendre Differential Equation)的解:

[公式]

勒让德方程是物理和工程领域里面常常遇到的一类常微分方程,也是拉普拉斯微分方程的一种变形,当试图在球坐标中求解三维拉普拉斯方程(或者其他偏微分方程的时),问题经常会归结为勒让德方程的求解。当方程满足 [公式] 时,可以得到有界解(解级数收敛)。并且当 [公式] 时, [公式] 处也有有界解。在这种情况下,方程的解随着 [公式] 值变化而变化,构成的一组由正交多项式组成的多项式序列,称为勒让德多项式:

[公式]

而[7]伴随勒让德多项式(ALP)则有两个参数 [公式] ,可以基于普通勒让德多项式 [公式]来定义 :

[公式]

 

球谐函数

球谐(基)函数是定义在球面上的。(下面球谐就简写为SH)。SH函数在通用情况下是在复数的基础上定义的,但是我们在图形学里面一般只关心定义在球面的实函数(在球谐光照里面,这个实函数可以是多通道的光强分布,也可以是传输函数,等等),所以这篇文章就只关心实球面调和(Real Spherical Harmonics)。

引入一下球谐函数的解析式吧。先给出单位球上坐标的参数化[1]:

[公式]

那么,一般我们把球谐函数记为 [公式] ,表达式是

[公式]

其中 [公式] 就是前文讲的伴随勒让德多项式,突然出现的 [公式] 是一个缩放系数,用来归一化:

[公式]

注意一点,虽然ALP的"degree"参数 [公式] 是非负整数,但是球谐函数的参数 [公式] 则是可以取到负数的,取值区间关于0对称,也就是:

[公式]

图:前三阶的球谐基可视化

有的时候,把SH函数的项展开成1D向量(变成个线性表)是挺有用的,所以我们就可以定义一个单参数的球谐函数项序列:

[公式] ,其中 [公式]

明显 [公式] 就是第0项, [公式] 是第2项, [公式] 是第6项, [公式] 是第12项....

 

 函数的投影

提到定义在球面 [公式] 上的函数 [公式] 可以用球谐函数展开成二重广义傅立叶级数。所以笔者认为所以实球谐函数也可以看成是一维傅立叶变换的函数基底 [公式]的复杂版本(且函数是定义在单位球面上) 。

[公式] 在球面 [公式] 上的展开式为:

[公式]

其中 [公式] 就是频域上的系数了。系数的求解依旧是要走一波积分变换(integral transform):

[公式]

也就是频域上的系数[公式]要求我们求 原函数 [公式] 与球谐函数 [公式] 的乘积 在球面上的积分。一般我们把这个求系数的过程叫做投影(Projection)。在实际操作中,我们写程序时不可能会有对无穷级数进行储存和卷积的操作,一般展开项只能是有限项,也就是:

[公式]

其中n是球谐基band的数量,显然n个band的球谐基数量是 [公式] 个(自己翻回去看看前几阶球谐基的图)。这个过程是一个带限的近似(band limited approximation)。在这个语境下,因为频域信号带宽的限制,大于一定阈值的高频信号就被去掉了。所以我们只能用 [公式] 个预计算的球谐系数(SH Coefficient)和球谐函数本身近似地重建出原函数:

从图中可以看出,球谐展开阶数越高,能重构出来的信号就越精确。

 

球谐函数的几个性质

[1]球谐函数有很多有趣性质,所以它比其他的基函数更加适合用于编码定义在球面上的光照函数。

.

  • 标准正交性

首先,球谐函数 [公式] 不只是正交的,它还是标准正交(orthonormal)的,作为一族基函数来说,它是优秀的。

球谐光照与PRT学习笔记(三):球谐函数 也说了我们可以把 [公式] band的球谐函数 [公式]展平成一维线性表[公式],那么标准正交的意思是:

[公式]

.

  • 旋转不变性

其次,球谐函数还是旋转不变(rotationally invariant)的。这个意思是,如果我们有旋转操作 [公式] ,那么如果我们有一个定义在单位球面上的原函数 [公式] ,设旋转过后的函数是 [公式] ,也就是:

[公式]

那么我们会有:

[公式]

这篇关于球谐函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!