我正在尝试在 Matlab 上绘制一个正方形,特别是使用 line
命令,其角点位于 (0,0)、(0, rho)、(rho, 0) 和(罗,罗)
% 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
命令不起作用,尽管该部分实际上是可选的。我的主要问题是为什么上述行不会出现在图中
最佳答案
那是因为您没有正确指定框的坐标。请记住,line
接受两个向量,其中第一个向量是 x
坐标列表,第二个向量是 y
坐标列表。每对第 i (x, y)
都会从其前一个 (i-1)th 点到第 i 个点绘制一条线当然,第一点除外。 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
一样。我们得到:
关于matlab - 用Matlab的 'line'命令画一个正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44656023/