用Matlab的'line'命令绘制一个正方形

时间:2017-06-20 14:35:24

标签: matlab plot matlab-figure

我试图在Matlab上绘制一个正方形,特别是使用line命令,在点(0,0),(0,rho),(rho,0)和(rho, RHO)

% 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命令无效,尽管该部分非常可选。我的主要问题是为什么上述行不会出现在情节

2 个答案:

答案 0 :(得分:4)

那是因为你没有正确指定盒子的坐标。请记住,line接收两个向量,其中第一个向量是x坐标列表,第二个向量是y坐标列表。每个i th (x, y)将有一条线从其先前的(i-1) th 点开始直到i th 点除了第一点当然。 AB绘制的线条是相同的线。 CD也是如此。只需要修改语句就可以正确地绘制线条。

以可爱的ASCII图形绘制框以供说明:

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

你需要绘制四条线。让我们逆时针走:

  1. (0, 0)转到(0, rho)
  2. (0, rho)转到(rho, rho)
  3. (rho, rho)转到(rho, 0)
  4. (rho, 0)转到(0, 0)
  5. 因此,请将您的代码修改为:

    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

    将所有坐标放在两个向量中并调用line可能更清晰。这也可以很好地与fill

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

    请注意,我们使用line的正确约定,然后绘制它,然后我们填充它。如果您遵循前面指定的逻辑,我们会从(0, 0)(0, rho),然后从(0, rho)(rho, rho),然后从(rho, rho)到{{1最后从(rho, 0)返回(rho, 0)。请注意,我们必须在开头和结尾使用原点(0, 0),以确保我们在正方形的底部边缘绘制线条。我们还使用(0, 0)在您在图上绘制的方形边界之后添加填充框。 hold on采用坐标向量,就像fill一样。我们得到:

    enter image description here

答案 1 :(得分:3)

您对linefill的输入参数犯了一些错误。首先,line的输入是线点的x坐标,后跟线点的y坐标, NOT 连续的(x,y)点对。以下将正确绘制您的方块,从(0,0)开始并顺时针绘制线条

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。这些可用于修改行属性,但您无法将这些属性传递给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');