介绍

一个简单的海水模型截面视图的模拟。

预览

预览页面

建模

我们假设水的传播是一个振动模型(实际上并不是,为了简便),它的函数可以写成:

y(t)=A*sin(2\pi ft+\phi)

其中f是水波的振动频率,\phi是相位。 假设在平面\sigma上有个振动源\{S_i(x_i,y_i)\} 和一个目标点T(x_0,y_0),我们可以推导出T(x_0,y_0)位置的振动幅度为:

f(T)=\sum_{i=1}^{n}A_i*sin(2\pi(ft-\frac{||T-S_i||}{\lambda})+\phi_i)

这样,平面\sigma上的每个点的振动幅度为:

f(x,y)=\sum_{i=1}^{n}A_i*sin(2\pi(ft-\frac{\sqrt{(x-x_i)^2+(y-y_i)^2}}{\lambda})+\phi_i)

通过上面的公式,我们可以得到每时每刻平面上每个点的振动幅度,从而实现水波的模拟。

改进

经过一些实验后,发现水面有点奇怪。大体上模型有点像海洋,但是当观察一段时间后会发现水的振动太有规律了。为了提高视觉效果,我们将每个振动源的频率f同样设置成随机变量。