这个产生水波的公式是如何工作的?

我一直试图用Java来实现本文描述的波动方程(“计算机graphics学中的模拟”,李凯和黎明武)。 本文的部分内容将建模波形描述为正弦波的总和(“正弦波打桩”); 在这一部分有一个描述单个正弦波的方程:

Y(x,y,t)= A * cos(w *(x,y)+ wt * t + FI; 

哪里

  • A =波的幅度
  • L =波长
  • w =空间角频率
  • s =速度
  • wt =时间角频率
  • d =方向
  • FI =启动阶段

我明白它会返回一个向量,但是我不知道这个公式的含义是什么:

 w *(x,y) 

我相信w是一个vector,但是我不确定它是3Dvector还是2Dvector,以及它是如何使用的。 如果你有时间,可以向我解释这个公式吗?

该函数返回一个标量,但variablesw的确是一个向量。 一般来说,一维波函数写成:

Ψ(x,t)= A cos(kx-ωt)

在不止一个维度上,例如水中的波浪而不是绳索,空间部分被写成两个向量的点积:

Ψ( x ,t)= A cos( k · x – ωt)

在你提到的公式中, x是作为二维向量(x,y)写成的,向量k被称为w ,符号*被用来表示一个点积。 波数(或角空间频率) k表示波传播的方向,其大小与波长成反比。 下面举例说明不同的波数对波的传播的影响。

k =(1,0)k =(3,0)k =(1,1)

根据请求,在用于生成这些图像的Mathematica代码下面:

 a = 1; k = {1,1}; \[Omega] = 2\[Pi]; Export["C:\\Users\\Mark\\tmp.gif", Table[ Plot3D[ a Cos[k.{x,y} - \[Omega] t], {x,-2,2},{y,-2,2}, PlotRange->{-a,a}, PlotLabel->"k = " <> ToString[k], AxesLabel->{"x","y",None}, Ticks->{Automatic,Automatic,None} ], {t,0,.96,.04} ] ] 

该公式将返回一个标量(坐标x,y处的水面高度),而不是向量。

很难说出作者的想法,因为这篇论文很混乱,但是我的猜测是它应该是这样的:

 Y(x,y,t) = A * cos(w * f(x,y) + wt * t + FI) 

f是控制波形的函数。

这个函数会产生一个以x0,y0为中心的圆形波:

 f(x,y) = sqrt((x - x0)² + (y - y0)²) 

这个function会产生一个角度为α

 f(x,y) = x * cos(α) + y * sin(α)