2017-10-06 84 views
1

我有三个函数依次被主函数调用,其中最终结果是一个正弦(或任何其他)函数的移动颜色图。主函数通过一个计时器对象来完成。Matlab定时器函数绘制一个函数

我能够创建一个静态图,但不能根据我的计时器对象中提供的值更新它。

我得到以下错误消息:

错误而定时器“定时器19”
无效或删除的对象评价TimerFcn。

对于主窗口中的代码如下:

clc; clear all; close all;  
rows = 1; 
cols = 30;  
t = timer('StartDelay', 0.05, 'Period', 0.05, 'TasksToExecute', 1000, ... 
      'ExecutionMode', 'fixedRate'); 
t.StartFcn = {@window, rows, cols}; 
t.TimerFcn = {@window_timer}; 
t.StopFcn = @(x,y)disp('end');  
start(t) 

代码由定时器功能调用的函数:

function window_timer(obj, event) 
    imgh = get(obj,'UserData'); 
    myMat = get(imgh,'CData'); 

    myMat = myMat_new(myMat); 

    set(imgh,'CData',myMat); 
    drawnow; 
    pause(0.02); 
    set(obj,'UserData',imgh); 
end 

最后,对于替换随机矩阵值的函数正弦函数

function [ myMat ] = myMat_new(myMat)  
    x = -pi:1/10:pi; 
    myMat = sin(x);   
end 

我在做什么错了?

+0

你怎么知道它没有运行。根据您的代码,“新”图像数据将看起来与“旧”图像数据相同,因为“myMat_new”总是返回相同的输出 – Suever

+0

因此,想法是该图应显示更新的彩色映射正弦波,直到该程序退出循环。由于我没有看到“移动”图,我可以说代码不起作用。 –

+0

虽然您并未更新数据。您每次只需更换相同的数据 – Suever

回答

0

当您运行的计时器创作的“OBJ”所以这行代码是有效的:

imgh = get(obj,'UserData'); 

,但我没有看到任何部分显示出IMGH有一个属性“CData的”。在你的代码中的imgh是一个计时器对象,而不是一个图形对象。

+0

“window_timer”函数的第二行显示,imgh具有“CData”属性。 –