海水截面模拟
介绍
一个简单的海水模型截面视图的模拟。已经通过matlab和html5+javascript实现。
预览
代码
建模
我们假设水的传播是一个振动模型(实际上并不是,为了简便),它的函数可以写成:
y(t)=A∗sin(2πft+ϕ)
其中
f
是水波的振动频率,
假设在平面
σ
上有个振动源
Si(xi,yi)
和一个目标点
T(x0,y0)
,我们可以推导出
T(x0,y0)
位置的振动幅度为:
f(T)=∑i=1nAi∗sin(2π(ft−||T−Si||λ)+ϕi)
这样,平面 σ 上的每个点的振动幅度为:
f(x,y)=∑i=1nAi∗sin(2π(ft−(x−xi)2+(y−yi)2−−−−−−−−−−−−−−−−√λ)+ϕi)
通过上面的公式,我们可以得到每时每刻平面上每个点的振动幅度,从而实现水波的模拟。
改进
经过一些实验后,发现水面有点奇怪。大体上模型有点像海洋,但是当观察一段时间后会发现水的振动太有规律了。为了提高视觉效果,我们将每个振动源的频率 f <script type="math/tex" id="MathJax-Element-11">f</script>同样设置成随机变量。