Значение ползунка MATLAB в файл данных - PullRequest
0 голосов
/ 12 марта 2012

У меня есть следующий код MATLAB:

function START_Callback(a,b)
global h;
global lastVal;
global picture1;
global picture2;
global nRep;
global MaxRep;
global index;
global files;
delete(gcf);

nRep = 1;
MaxRep = 529;

files = dir(fullfile('pictures','*.png'));
nFiles = numel(files);
combos = nchoosek(1:nFiles, 2);
index = combos(randperm(size(combos, 1)), :);
picture1 = files(index(nRep,1)).name;
picture2 = files(index(nRep,2)).name;
image1 = fullfile('pictures',picture1);
image2 = fullfile('pictures',picture2);
subplot(1,2,1); imshow(image1); title(picture1);
subplot(1,2,2); imshow(image2); title(picture2);

uicontrol('Style', 'text',...
        'Position', [200 45 200 20],...
        'String','How related are these pictures?');
uicontrol('Style', 'text',...
        'Position', [50 45 100 20],...
        'String','Unrelated');
uicontrol('Style', 'text',...
        'Position', [450 45 100 20],...
        'String','Closely related');
uicontrol('Style','pushbutton','String','Next Trial',...
        'Position', [250 350 100 20],...
        'Callback',{@NextTrial});

h = uicontrol(gcf,...
   'Style','slider',...
   'Min' ,0,'Max',50, ...
   'Position',[100 20 400 20], ...
   'Value', 25,...
   'SliderStep',[0.02 0.1], ...
   'BackgroundColor',[0.8,0.8,0.8]);

set(gcf, 'WindowButtonMotionFcn', @cb);

lastVal = get(h, 'Value'); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function cb(s,e)
global h
global lastVal;
global picture1;
global picture2;
global fileout;
global SaveResults;

fid = fopen(fileout, 'a');
    if get(h, 'Value') ~= lastVal;
        lastVal = get(h, 'Value');
        if SaveResults > 0;
        fprintf(fid, '%s\t%s\t%f\n', picture1, picture2, lastVal);
        fclose(fid);
        else
        fclose(fid);
    end
end

Моя проблема в том, как lastVal сохраняется в файле данных.Проблема двоякая:

  1. Если ползунок не перемещен, значение не сохраняется.Таким образом, если он остается в начальной позиции (25) и нажимается «Следующая пробная версия», он игнорирует эту пробную версию, как если бы ее не было.Я не хочу этогоЯ хочу сохранить любое значение положения ползунка независимо от того, был ли он перемещен или нет.

  2. Файл данных выглядит следующим образом:

    monkey.png  ostrich.png 24.262537
    monkey.png  ostrich.png 23.082596
    monkey.png  ostrich.png 20.870207
    monkey.png  ostrich.png 17.772862
    monkey.png  ostrich.png 13.790561
    monkey.png  ostrich.png 9.218289
    monkey.png  ostrich.png 5.383481
    monkey.png  ostrich.png 3.023599
    monkey.png  ostrich.png 2.433628
    

То есть MATLAB не только сохраняет позицию ПОСЛЕДНЕГО ползунка при его перемещении, но и сохраняет все промежуточные значения.Поэтому я хочу, чтобы вышеприведенное было только:

monkey.png  ostrich.png     2.433628

Как получить ТОЛЬКО печать последней позиции ползунка в конце пробной версии (включая значение по умолчанию, если ползунок не перемещен)

1 Ответ

2 голосов
/ 12 марта 2012

Поместите код записи файла в функцию обратного вызова кнопки (@NextTrial), а не функцию обратного вызова ползунка (@cb).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...