我试图在循环中显示一个变化的矩形,并暂停,它忽略了hold off(实际上它认为是默认值)。
这是一个简化版本的代码:
clc; close all; clear all;
rect = [10 10 20 30];
figure
axis([0 200 0 50]);
for i = 1 : 15
rect(1) = rect(1) + i;
rectangle('Position', rect, 'edgeColor', [1 0 0]);
hold off;
pause(0.2);
end
是故意的吗? 我错过了什么吗? 除了在每次迭代后将其绘制成白色之外,我还能做些什么来使之前的矩形消失?
谢谢..
编辑
非常简化的版本已经解决,但是如果我想在同一个数字上绘制另一个东西,另一个情节忽略了延迟。 在这种情况下我该怎么做?
再次感谢。
clc; close all; clear all;
rect = [10 10 20 30];
figure
axis([0 200 0 50]);
h1 = [];
for i = 1 : 15
rect(1) = rect(1) + i;
delete(h1);
h1 = rectangle('Position', rect, 'edgeColor', [1 0 0]);
hold on
plot (5 + 5 * i, 5, '*g');
hold off
pause(0.2);
end
答案 0 :(得分:7)
使用Matlab R2014b中的update of the handle graphics engine,文档中的符号稍有改动。没有独特的网站 核心图形对象和绘制对象了,但here您可以看到这两种对象现在称为绘制函数对象和原始对象。
原因是,为绘制而Core Graphics Objects与其子组Plot Objects之间存在差异,目的是显示数据,使用Core Graphics Objects执行此操作。
核心图形对象
核心图形对象包括基本绘图基元:
线条,文本和多边形外壳(修补程序对象)
像曲面这样的专业对象,由一个矩形的顶点网格组成
图片
灯光对象,不可见但会影响某些物体的着色方式
绘制对象
许多高级绘图功能会创建绘图对象。该 绘图对象的属性提供了对重要内容的轻松访问 绘图对象包含的核心图形对象的属性。
一个典型的例子是命令line
和plot
- 它们基本相同。但他们属于不同的群体。如果想要绘制数据,他会使用plot
,完成任务。如果想要"画" 行的内容更容易,您不需要hold
一切。
所以回答你的问题:是的,这是故意的。
为了解决您的问题,我会使用plot
编写一个新的矩形函数:
function h = plotRectangle(posX, posY, width, height)
x = [posX posX+width posX+width posX posX];
y = [posY posY posY+height posY+height posY];
h = plot(x,y);
end
分别为:
function h = plotRectangle(PosVector)
X = PosVector;
x = [X(1) X(1)+X(3) X(1)+X(3) X(1) X(1)];
y = [X(2) X(2) X(2)+X(4) X(2)+X(4) X(2)];
h = plot(x,y);
end
后者现在可以与您的代码一起使用:
rect = [10 10 20 30];
figure
axis([0 200 0 50]);
for i = 1 : 15
rect(1) = rect(1) + i;
plotRectangle(rect);
hold off;
pause(0.2);
end
答案 1 :(得分:2)
修改了你的代码:
clc; close all; clear all;
rect = [10 10 20 30];
figure
axis([0 200 0 50]);
h1 = [];
for i = 1 : 15
rect(1) = rect(1) + i;
delete(h1);
h1 = rectangle('Position', rect, 'edgeColor', [1 0 0]);
pause(0.2);
end
希望这会有所帮助..
答案 2 :(得分:1)
你可以使用湖泊已经提出的相同方法。下面我为第二个图添加了一个额外的句柄。
clc; close all; clear all;
rect = [10 10 20 30];
figure; hold on;
axis([0 200 0 50]);
h1 = [];
h2 = [];
for i = 1 : 15
rect(1) = rect(1) + i;
delete(h1);
delete(h2);
h1 = rectangle('Position', rect, 'edgeColor', [1 0 0]);
h2 = plot (5 + 5 * i, 5, '*g');
pause(0.2);
end