点在 matlab 中从一个角移动到另一个角(围绕监视器)

Dot moves from corner to corner (around monitor) in matlab

我正在尝试创建一个球或点或任何从左下角到右下角然后右上角然后左上角然后开始的左下角。基本上围绕着屏幕。总的来说,全屏很重要。对于全屏图形,我使用的是 WindowAPI。

这是我的代码。

try
   % Create a figure to operate on: --------------------------------------------
   % The OpenGL renderer is confused by the alpha blending, so Painters is used:
   FigH   = figure('Color', ones(1, 3), 'Renderer', 'Painters');
   axes('Visible', 'off', 'Units', 'normalized', 'Position', [0, 0, 1, 1]);
   % Set topmost status:
   WindowAPI(FigH, 'topmost');   % Command is not case-sensitive
   drawnow;
   WindowAPI(FigH, 'TopMost', 0);
   drawnow;
   WindowAPI(FigH, 'front');
   drawnow;
   
   % Nicer to have the figure on topmost for the rest of the demo:
   WindowAPI(FigH, 'topmost');
   
   % Special maximizing such that the inner figure fill the screen:
   WindowAPI(FigH, 'Position', 'full');  % Complete monitor
   
    % START MOVING BALL

X = 2;
Y = 0;
for i=1:1490
    X = X + 0.1;
    Y = 2
    plot(X,Y,'or','MarkerSize',20,'MarkerFaceColor','r')
    axis([0 151 0 85])  
    pause(0)
end
   % END MOVING BALL
   
end

为简单起见,点仅从左下角到右下角。 但是有两个问题。

  1. 那个点有时会滞后,这是个问题。
  2. 有可见的黑线(来自图表)。

而且我不知道如何解决这两个问题。因此,如果您知道如何修复它们或如何在 Matlab 中制作球动画的更好方法,请在此处 post。谢谢你的时间。

要减少 'Lag' 的数量,您可以执行以下几项操作:

  1. 将绘图线移出循环并将其分配给手柄,另外将轴突击队移出循环

    pH = plot(X,Y,'or','MarkerSize',20,'MarkerFaceColor','r');
    axis([0 151 0 85])  
    axis off
    

    现在可以直接在循环中更新X Y数据了。

    set(pH,'XData',X,'YData',Y)
    
  2. 将暂停替换为(将 0 替换为您希望帧延迟的秒数):

    tic;while toc<0;end
    

    这样更快、更精确,并且不会对 MatLab 造成中断。

  3. 在循环中添加drawnow命令使数字更新。