2017-06-20 32 views
2

私はMatlab上で、具体的にはlineコマンドを使用して角(0,0)、(0、ρ)、(ρ、0) )及び(ロー、ロー)Matlabの 'line'コマンドで四角形を描く

% create axes 
x = linspace(0,10,100); 
y = linspace(0,20,100); 
rho = 2*pi; 
% plot 
figure; 
A = line([0 0],[0 rho]); 
B = line([0 0],[rho 0]); 
C = line([0 rho],[rho rho]); 
D = line([rho 0],[rho rho]); 
fill(A,B,C,D,'b'); 

はしかし、ラインDは私の図に表示されないと、その部分は実際にはかなり任意であるが、さらに、fillコマンドは、機能していません。私の主な問題は、上記の行がプロットに現れない理由です

答えて

4

lineは、最初のベクトルがx座標のリストであり、2番目のベクトルがy座標のリストである2つのベクトルを取ります。各i thの対の(x, y)は、前の(i-1)番目のポイントからi 番目のポイントまでの直線を持ちます。 ABで描かれた線は、と同じ線です。 CDと同じことが言えます。これは、文を修正するだけで、線を正しく描くことができます。

は、説明のための素敵なASCIIグラフィックでボックスを描画:

(0, rho)  (rho, rho) 
------------------------ 
|      | 
|      | 
|      | 
|      | 
------------------------ 
(0, 0)   (rho, 0) 

あなたは4本の線を描画する必要があります。のは、反時計回りをトラバースしてみましょう:

  1. (rho, 0)からしたがって(0, 0)

に行く(rho, rho)から(rho, 0)

  • に行く(0, rho)から(rho, rho)
  • に行く(0, 0)から(0, rho)
  • に行く、修正あなたのコードは:

    rho = 2*pi; 
    A = line([0 0],[0 rho]); 
    B = line([0 rho],[rho rho]); 
    C = line([rho rho],[rho 0]); 
    D = line([rho 0],[0 0]); 
    

    ここで、上のコードは後で移植できない場合があります。fillへの入力としてこれを使用しないことで、細かいラインハンドルを取得しようとしています。

    我々は最終的に取得する:

    enter image description here

    ちょうどちょうど2つのベクトルの座標のすべてを入れて、lineを呼び出すためにきれいかもしれません。また、これはfillとうまくこの劇を行います:私たちはlineのための適切な規則を使用し

    rho = 2*pi; 
    x = [0, 0, rho rho, 0]; 
    y = [0, rho, rho, 0, 0]; 
    line(x, y); 
    hold on; 
    fill(x, y, 'b'); 
    

    お知らせし、我々はそれを埋める、それを描きます。先に指定したロジックに従うと、(0, 0)から(0, rho)まで、次にから(rho, rho)まで、次に(rho, rho)から(rho, 0)まで、そして最後にまでの直線を描きます。正方形の下端に線が引かれるように、最初と最後に起点(0, 0)を使用しなければならなかったことに注意してください。 hold onを使用して、図の上に描いた四角形の境界の後に塗りつぶしたボックスを追加します。 fillは、lineのような座標のベクトルを取ります。私たちは:

    enter image description here

  • 3

    linefillの入力引数に関して、いくつかの間違いを犯しました。まず、lineへの入力は、ラインポイントのx座標、ラインポイントのy座標、NOT連続する(x,y)ポイントのペアです。

    A = line([0 0], [0 rho]);  % Left edge 
    B = line([0 rho], [rho rho]); % Top edge 
    C = line([rho rho], [rho 0]); % Right edge 
    D = line([rho 0], [0 0]);  % Bottom edge 
    

    を返された値がhandles to the line graphics objectsある:以下は(0,0)から始まり、時計回りに線を引く、正しく広場をプロットします。これらを使用してラインプロパティを変更することはできますが、これをfillに渡すことはできません。代わりに、ポリゴンの頂点データを渡す必要があります。

    これをすべて処理する簡単な方法があります。あなたが代わりに、それははるかに簡単に線や塗りつぶされた多角形をプロットすること、xとあなたの正方形の頂点のy座標のベクトルを定義することができます。

    あなたは正しくボックスの座標を指定されていないためだ
    X = [0 0 rho rho 0]; 
    Y = [0 rho rho 0 0]; 
    hLine = line(X, Y); 
    hold on; % Needed to add to existing plot instead of erasing 
    fill(X, Y, 'b'); 
    
    関連する問題