Gerstner Wave 理解

Gerstner波是一种描述水面波浪的数学模型,考虑了横波和纵波的组合效果。在不可压缩流体中,波峰和波谷的形状受到质点分布的影响,Gerstner波通过参数方程模拟了这种物理现象,常用于游戏开发和图形渲染中的水体效果。公式中的表面压力和陡峭度参数控制着波浪的形状和动态特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        这是一篇理解Gerstner Wave的文章。

 

        首先给出理想sin波的方程,假设波位于xoy平面,a是振幅,k是频率,c是波速:

P_{y} = a * sin(k * (x - c * t))

        先看上半部分的sin波,红点代表平衡位置,黑点代表表面的偏移位置。可以看到sin波只考虑了垂直方向的移动。从本质上说,水面波是横波和纵波的集合,但上面的正弦波我们只考虑了它的横波分量,即与传播方向垂直的运动。实际上水面波也会在传播方向上运动,我们在日常生活中也经常看到,比如飘在水面的叶子也会在波传播的方向上左右晃动,而非单纯的上下移动。

        那么这个纵波具有什么样的特性呢?假设是不可压缩流体,表面质点分布均匀的话,我们知道在波峰的位置,由于表面往上移动,必须要有水流来填补下面的空间,这意味着周边质点汇集。而在波谷的位置,由于表面上的质点往下移动,肯定会将下面的水体挤出,导致下面的质点分散。所以物理正确的波形,在波峰处肯定要陡峭一些,在波谷处肯定要平缓一些。Gerstner波就描述了这种特性:参考上图下半部分,红点代表平衡位置。在波峰附近,周围的质点会向它聚集。在波谷附近,周围的质点会远离它。并且这个纵波刚好与横波相反,横波的波峰对应纵波的波谷,横波的波谷对应纵波的波峰,实际上这时候纵波可以用余弦函数表示。

        不妨看一些Gerstner波的演示图:

        可以清晰的看到表面质点的汇集和分散现象,同时这里给出了质点的受力分析:水体表面的质点受到重力(向下)和水的压力(指向表面法线方向),两者结合的合力组成了匀速圆周运动的向心力。

        参考上图,不止是表面会做这样的圆周运动,在水体内部也一样,只是半径随着深度变大而减小。

        wiki上给出Gerstner波的公式如下:这里(a, b)代表是是原始的xy位置,实际上就是一个以(a,b)为圆心的参数方程:

        有几点需要修改,首先我们需要波向x轴正方向传播,所以波速c要带负号;其次我们希望y方向初始是sin波,所以需要向右平移PI/2相位;另外根据波速与频率的关系c*c=g/k,得到结果如下:

\newline P_{x} = x + \frac{e^{kb}}{k} * cos(k * (x - \sqrt{\frac{g}{k}} * t)) \newline P_{y} = y + \frac{e^{kb}}{k} * sin(k * (x - \sqrt{\frac{g}{k}} * t))

        这里的b代表表面压力,是一个负值,所以exp(kb)介于0~1之间,在b=0时取得最大值1,实践时通常使用陡峭度(steepness)来代替。值越大时,波的幅值越大所以越陡峭。从而得到最终的公式:

\newline P_{x} = x + \frac{s}{k} * cos(k * (x - \sqrt{\frac{g}{k}} * t)) \newline P_{y} = \frac{s}{k} * sin(k * (x - \sqrt{\frac{g}{k}} * t))

参考:

水体渲染之Gerstner波形理解与推导 - 知乎

https://en.wikipedia.org/wiki/Trochoidal_wave

Waves

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值