2017-10-06 53 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」屬性。 –