2017-02-12 5 views
0
close all; clc; clear all; 
A0 = 1.5; % meters 
lambda = 100 % meters 
k = (2*pi)/lambda; 
T = 3600 % Period in seconds 
ome = 2*pi/T; % omega 
x = 0; z = 0; 
t = linspace(0,7200,100); % 2 periods, 100 data 
zz=0; 
for z = 0:20:20; 
    zz = zz+1; 
    % multiplied by 100, unit in cm/s 
    u= 100.*ome*A0*exp(-k*z)*sin(k*x - ome*t); 
    w = 100.*-ome*A0*exp(-k*z)*cos(k*x - ome*t); 
    uu(zz,:) = u; % size(uu) 2 100 
    ww(zz,:) = w; % size(ww) 2 100 
end 

figure(1) 
color = -0.8; 
for zz = 1:2 
    color = color + 0.8; 
    for i=1:3:49; % plot circle for one period 
     plot([uu(zz,i) uu(zz,i+3)],[ww(zz,i) ww(zz,i+3)], 'color',([color+0.2 0 0]), 'linewidth', 2) 
     hold on 
    end 
end 
title('Plot of lines from (0,0) to (u(i), v(i). Radius or amplitude in cm/s') 
axis equal; 
grid on; 
legend('radius at surface','radius at depth 20')% 

このスクリプトは2つの円をプロットします。小さいものは赤、もう1つは黒です。しかし伝説はこれらのサークルと一貫していません。MATLABの凡例は2つの円をプロットするためには機能しません

+0

あなたの軸に(各ループの反復を)多くの行オブジェクトを作成し、伝説の関数アドレスためでありますこれらの行オブジェクト – bla

答えて

1

これは、軸に多くの線オブジェクトを作成する(plotを実行するたびにループが繰り返される)、凡例関数がこれらの線オブジェクトを指定するためです。 sp line1とline2はまだ描いているポリゴンの一部です。

私はあなたの質問に答えますが、あなたのコードは最適ではなく、2つの円や多角形を描画する最良の方法ではないことをご存知でしょうか。

ので、あなたのコードに最小限の変更で、これはあなたが何ができるかです:

.... 
figure(1) 
color = -0.8; 
for zz = 1:2 
    color = color + 0.8; 
    for i=1:3:49; % plot circle for one period 
     h(zz)=plot([uu(zz,i) uu(zz,i+3)],[ww(zz,i) ww(zz,i+3)], 'color',([color+0.2 0 0]), 'linewidth', 2) 
     hold on 
    end 
end 
title('Plot of lines from (0,0) to (u(i), v(i). Radius or amplitude in cm/s') 
axis equal; 
grid on; 
legend([h(1) h(2)],{'radius at surface','radius at depth 20'}); 

enter image description here

+0

完全に動作します。ありがとう、多くのBLA。 – User1961

関連する問題