2013-07-02 53 views
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曲線(以紅色粗體),而不是表面

enter image description here

回答

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/2進行的波浪,對於90度的波浪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 

當然,正弦線的形式將取決於從切片線的方向,您可以針對不同切片方向接收不同的波。

+0

非常感謝。這幾乎是我需要的。但是我正在爲f1和f2尋找一維正弦(不是2D),即波在x-y平面上,但沿着給定方向,它只是一維正弦。 – user1285419

+0

如果你正在談論兩個波在任一方向傳播,但是沿着同一條線傳播,這可以歸結爲一維情況。但是你要'(例如,一個沿着30度和其他沿着90度)',這是2D情況,不能簡化爲1D問題。 – anandr

+0

你也可以通過用'imagesc(f); axis equal; axis tight'代替'surf(...'line')將圖像想象爲圖像;' – anandr

相關問題