那是因为你没有为框中指定坐标正确。请记住,line
需要两个向量,其中第一个向量是一列x
坐标,第二个向量是一列y
坐标。除了第一点外,每一个对(x, y)
都将具有从其先前(i-1)点直到第点绘制的线。由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)
到(rho, 0)
然后最后从(rho, 0)
回到(0, 0)
。请注意,我们必须在开始和结束时使用原点(0, 0)
,以确保我们在正方形的底部边缘绘制线条。我们还使用hold on
将填充框添加到您在图上绘制的方形边界之后。 fill
需要坐标向量,就像line
一样。我们得到: