代码之家  ›  专栏  ›  技术社区  ›  Evgenii

尝试向plot3添加点时出错

  •  1
  • Evgenii  · 技术社区  · 7 年前

    我正在尝试动态地将信息添加到三维绘图中:

    A = [ -8/3 0 0; 0 -10 10; 0 28 -1 ];
    y = [35 -10 -7]';
    h = 0.01;
    p = plot3(y(1),y(2),y(3),'.','EraseMode','none','MarkerSize',2);
    axis([0 50 -25 25 -25 25])
    hold on
    while 1
        A(1,3) = y(2);
        A(3,1) = -y(2);
        ydot = A*y;
        y = y + h*ydot;
        set(p,'XData',y(1),'YData',y(2),'ZData',y(3))
        drawnow
    end
    

    我得到以下错误:

    警告:EraseMode属性不再受支持,将出错 在未来的版本中。

    奇怪的吸引子(第4行)警告:EraseMode属性不再受支持,在将来的版本中将出错。

    使用matlab.graphics.chart.primitive.line/set无效或删除的对象时出现奇怪的_吸引子(第4行)错误。

    奇异吸引子错误(第12行) 集合(P,'xdata',Y(1),'ydata',Y(2),'zdata',Y(3))

    我知道我正在使用过时的语法来动态更新不再受支持的绘图。我该怎么做?

    注意我不想打电话 plot3 在循环内部,因为它会使图形变慢并消耗大量内存。我希望调用一次plot3,只需在循环内的现有绘图中添加新的点。在新版本中可以完成吗?

    matlab版本:r2018a

    1 回复  |  直到 7 年前
        1
  •  3
  •   Phil Goddard    7 年前

    在你上面的评论中,当你说“这行不通”时,你是什么意思?根据文档的给定链接直接修改代码可以按预期工作:

    a=[-8/3 0 0;0-10 10;0 28-1];
    Y=[35-10-7]';
    H=0.01;
    P=动画线(Y(1),Y(2),Y(3),“marker”,“.”,“markersize”,2);
    轴([0 50-25 25-25 25])
    坚持
    而1
    a(1,3)=y(2);
    A(3,1)=-Y(2);
    YDOT= a*y;
    Y= Y+H*YDOT;
    加点(P,Y(1),Y(2),Y(3)
    刷新屏幕
    结束
    < /代码> 
    
    

    按预期缠绕工作:

    A = [ -8/3 0 0; 0 -10 10; 0 28 -1 ];
    y = [35 -10 -7]';
    h = 0.01;
    p = animatedline(y(1),y(2),y(3),'Marker','.','MarkerSize',2);
    axis([0 50 -25 25 -25 25])
    hold on
    while 1
        A(1,3) = y(2);
        A(3,1) = -y(2);
        ydot = A*y;
        y = y + h*ydot;
        addpoints(p,y(1),y(2),y(3))
        drawnow
    end
    

    enter image description here