2016-06-16 25 views
0

ループを使用して、画面の左右に点滅する画像を表示しようとしています。現時点では動作していますが、フォルダに表示される順番で画像が表示されますが、ランダムに表示することは好きではありません。そして、アイデアは高く評価されます。私はWindows上でMATLABでpsychtoolboxを使用していますループを使用して画像をランダムな順序で表示

、ここに私のコードは次のとおりです。

%reading in all images 
baseDir=pwd; 
cd([baseDir,'\Images']) %change directory to images folder 
jpegFiles = dir('*.jpg'); % create a cell array of all jpeg images 

for k=1:size(jpegFiles,1) 
images{k}=imread(jpegFiles(k).name); 
end 
cd(baseDir) %change directory back to the base directory 


%using a loop to show images 
for k=1:290 
texture1(k)=Screen('MakeTexture',w,images{k});  
end 
for k=1:145 
Screen('DrawTexture',w,(texture1(k)), [], leftposition); 
Screen('DrawTexture',w,(texture1(k+145)), [], rightposition); 
Screen('DrawLines', w, allCoords,... 
lineWidthPix, black, [xCenter yCenter], 2); 
Screen(w,'Flip'); 
pause(0.2); 
end 
+0

ようになりますあなたのコードで

はあなたに私のためにそれをソートした@BillBokeeyを、ありがとうございました! – Emily

答えて

2

あなたはアップフロントイメージのリストをシャッフルするrandpermを使用することができますどちらか。

images = images(randperm(numel(images))); 

この方法を使用すると、同じイメージが方法論を使用して2回表示されないことが保証されます。

あなただけ(それは以前に表示されていた場合でも)ランダムに任意の画像を表示したい、というよりもimages{k}を使用している場合、あなたは(randiを使用して)1numel(images)の間のすべての値からランダムインデックスを描画し、その画像を表示することができます。

images{randi([1 numel(images)])} 

またはtexture1にランダムにインデックスを付けることができます。この

nImages = numel(images); 

% Loop all of this as long as you want 

left_texture = texture1(randi([1 nImages])); 
right_texture = texture1(randi([ 1 nImages])); 

Screen('DrawTexture', w, left_texture, [], leftposition); 
Screen('DrawTexture', w, right_texture, [], rightposition); 
関連する問題