上一篇文章中,介绍了一个简单数值方法来模拟圆形扩散波的效果,但是这种方法对于自然中像海浪一样的波
就无能为力了。所以,这篇文章介绍用Gerstner波来模拟水面波纹效果。
一、Gerstner波介绍
Gerstner波是一种动态模拟海面幅度的方法,已有200多年的历史,后被用于计算机图形学。
首先,我们介绍一下几个常用的描述波函数的物理量,便于理解马上要介绍的Gerstner波方程。
A:amplitude 振幅,波相较于平衡位置的最大偏移量。
ω:角速度。
λ:波长
k:波数 (2π/λ)
K:波矢量(wavevector)其大小为波数,方向为波传播的方向,在3D波方程中,是一个2D向量
现在给出Gerstner波的方程,以参数方程的形式给出:
x=x0-(K/k)*Asin(K*x0-ωt)
y=Acos(K*x0-ωt)
肯定有朋友会问,明明是3D的波方程,为何只有两个变量xy。大家请注意,第一个式子中,加粗的部分,上面
已经介绍过,K是一个2D向量,方向表示在x-z平面波传播的方向,所以第一个加粗的部分(包括x,x0)都不是一个标量,而是一个二元量,表示的是在x-z平面上的具体位置,x=(x,z),x0=(x0,z0)。这样第一个式子得出的结果也自然是一个2D向量(K,x0点乘结果为一个标量)。