我试图在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
命令无效,尽管该部分非常可选。我的主要问题是为什么上述行不会出现在情节
答案 0 :(得分:4)
那是因为你没有正确指定盒子的坐标。请记住,line
接收两个向量,其中第一个向量是x
坐标列表,第二个向量是y
坐标列表。每个i th 对(x, y)
将有一条线从其先前的(i-1) th 点开始直到i th 点除了第一点当然。 A
和B
绘制的线条是相同的线。 C
和D
也是如此。只需要修改语句就可以正确地绘制线条。
以可爱的ASCII图形绘制框以供说明:
(0, rho) (rho, rho)
------------------------
| |
| |
| |
| |
------------------------
(0, 0) (rho, 0)
你需要绘制四条线。让我们逆时针走:
(0, 0)
转到(0, rho)
(0, rho)
转到(rho, rho)
(rho, rho)
转到(rho, 0)
(rho, 0)
转到(0, 0)
因此,请将您的代码修改为:
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
的输入。
我们终于得到了:
将所有坐标放在两个向量中并调用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
一样。我们得到:
答案 1 :(得分:3)
您对line
和fill
的输入参数犯了一些错误。首先,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');