0

我在网上看到一个代码来添加两个相反移动的正弦波。

x = [0:0.1:2*pi];
w = 1;
for t=0:0.01:10
  f1 = sin(x - w*t);
  f2 = sin(x + w*t);
  f = f1+f2;
  plot(x, f);
  drawnow;
end

我正在考虑添加两个正弦,但方向不同(例如,一个沿 30 度,另一个沿 90 度)。我读了文字,它说正弦波在不同方向移动取决于波向量

  f1 = sin(kx*x + ky*y - w*t);
  f2 = sin(kx*x + ky*y + w*t);

但是这里有两个变量,x 和 y,那么如何可视化波浪呢?

我要绘制的不是 3D 正弦板,而是 3D 线。例如,在下面的图中,我想显示 3D 曲线(粗体红色)而不是曲面

在此处输入图像描述

4

1 回答 1

1

在这种情况下,您需要使用 3D 绘图来可视化波浪。例如,您可以为此使用 surf 命令。

x = [0:0.1:2*pi];
y = [0:0.1:2*pi];
[X,Y]=meshgrid(x,y);
kx=1;
ky=0.5;
w = 1;
for t=0:0.01:10
  f1 = sin(kx*X +ky*Y - w*t);
  f2 = sin(kx*X + ky*Y - w*t);
  f = f1+f2;
  surf(X,Y,f)
  drawnow;
end

更新:

如果您想要两个不同方向的波,您将需要单独的波矢量值,例如沿 30 度的波,沿kx1=sqrt(3)/2, ky1=1/290 度的波kx2=0, ky2=1

此外,如果您想要波形线而不是 3D 板,则可以在某些选定线的方向上生成正弦板切片。

例如,您希望接收方向为 45 度 (x = y) 的切片。

第一步是产生切片线点的向量:

lx = 1/sqrt(2);    % (lx,ly) - direction vector for slice line
ly = 1/sqrt(2);
r = [0:0.1:4*pi];     % parameter to produce line in parametric form
x = lx * r;
y = ly * r;

然后我们将使用这些向量作为正弦方程的输入:

kx1=sqrt(3)/2;
ky1=0.5;
kx2=0;
ky2=1;
w = 1;
for t=0:0.01:10
  f1 = sin(kx1*x + ky1*y + w*t);
  f2 = sin(kx2*x + ky2*y + w*t);
  f = f1+f2;
  plot(r,f);
  drawnow;
end

当然,正弦线的形式将取决于切片线的方向,并且您可以针对不同的切片方向接收不同的波。

于 2013-07-02T04:36:13.877 回答