Main Content

沿着线条移动一组对象

此示例演示如何使用变换沿着线条移动一组对象。

绘制一条正弦波,将坐标轴范围模式设置为手动,以避免在动画循环中重新计算范围。

x = linspace(-6,6,1000);
y = sin(x);
plot(x,y)
axis manual

创建一个变换对象并将父级设置为当前坐标区。在线条初始处绘制标记和文本注释。使用 num2str 函数将该点处的 y 值转换为文本。通过将两个对象的父级设置为变换对象,将两个对象归为一组。

ax = gca;
h = hgtransform('Parent',ax);
hold on
plot(x(1),y(1),'o','Parent',h);
hold off
t = text(x(1),y(1),num2str(y(1)),'Parent',h,...
    'VerticalAlignment','top','FontSize',14);

通过更新变换对象的 Matrix 属性,将标记和文本沿线条移动到每个后续点。使用线条中后接点和第一个点的 x 和 y 值确定变换矩阵。更新文本以匹配随着线条移动时的 y 值。使用 drawnow 显示每次迭代后的屏幕更新。

for k = 2:length(x)
    m = makehgtform('translate',x(k)-x(1),y(k)-y(1),0);
    h.Matrix = m;
    t.String = num2str(y(k));
    drawnow
end

动画显示标记和文本沿着线条一起移动。

如果有很多数据,您可以使用 drawnow limitrate 代替 drawnow 以实现更快的动画。但是,drawnow limitrate 可能不会在屏幕上绘制每个更新。

另请参阅

| | | | |

相关主题