330 likes | 458 Views
Matlab Class 2 Xiaotao Su, Ph.D. Visual Psychophysicist & IT Group Leader Rutgers Center for Cognitive Science (RuCCS). Character Vectors And Numeric Vectors. 'hello world' is referred to as a character string or a character vector [35, 26.3, 11, 4] is a numeric vector
E N D
Matlab Class 2Xiaotao Su, Ph.D.Visual Psychophysicist & IT Group LeaderRutgers Center for Cognitive Science (RuCCS)
Character Vectors And Numeric Vectors • 'hello world' is referred to as a character string or a character vector • [35, 26.3, 11, 4] is a numeric vector • These are the two main data types in matlab
Character Vectors (aka Strings) And Numeric Vectors • How to convert between these two data types? What if I have a string, '39.5' and I want to add to it? • num2str & str2num • str2num('39.5') + 5 • ['hello w', 'orld'] • a = [3, 9]; • b = [12.6, 8]; • [a, b] • c = ['1', num2str(39.5)] • str2num(c) + 200
Taking inputs • Create a new program called math.m % math.m % % Carries out a series of calculations on two % numbers % % written by Your Name July 2010
clear all; %take inputs num1=input('what is the first number?'); num2=input('what is the second number?'); %show calculations disp([num2str(num1), '+', num2str(num2), '=', num2str(num1+num2)]); disp([num2str(num1), '-', num2str(num2), '=', num2str(num1-num2)]);
boolean expressions • Boolean expressions either return1 for trueor 0 for false • Possible operators:
Note: Put operations inside parenthesis so they are preformed first. • 1==1 • (1 + 1)==2 • (5 + 5) < 10 • (5 + 5) <=10 • (1 == 1) & (2==3) • (1 == 1) | (2==3) • 5 + (5 < 10)
Conditionals (if statements) if(Boolean Expression) do something end you can also do this: if(boolean expression) do something else do something else end or this: if(boolean expression) do something elseif(boolean expr2) do something else end
Back to math.m if ( (round(num1)==num1) & (round(num2)==num2) ) disp('num1 and num2 are integers') end
if ( (round(num1)==num1) & (round(num2)==num2) ) disp('num1 and num2 are integers') elseif(round(num1)==num1) disp('only num1 is an integer') elseif(round(num2)==num2) disp('only num2 is an integer') else disp('neither number is an integer') end
Task 1 • Have math.m tell me which number is larger then the other “the biggest number is …”
Screen drawing and psychtoolbox Screen Geometry Origin Coordinates are measured in pixels. X ----------- Positive -> Y Positive Max X and Y
How you typically work with the psychtoolbox Back Buffer (invisible) Front Buffer
How you typically work with the psychtoolbox Step 1: Draw Shape to the back buffer Front Buffer
How you typically work with the psychtoolbox Step 2: Flip the back buffer to the front buffer
How you typically work with the psychtoolbox Back Buffer is automatically cleared
How you typically work with the psychtoolbox Now you can continue with your next frame of animation
How you typically work with the psychtoolbox Flip the back buffer to the front buffer
How you typically work with the psychtoolbox Back Buffer is automatically cleared
Set up program draw_stuff % draw_stuff.m % % Draws stuff on the screen
Initialize the main window % draw_stuff.m % % Draws stuff on the screen clear all; which_screen=0;
Set up program draw_stuff % draw_stuff.m % % Draws stuff on the screen clear all; which_screen=0; [window_ptr, screen_dimensions] =Screen(0,'OpenWindow', [0, 0, 0]); 0 Vector specifying Screen color Command issued to the psychtoolbox Screen function 0 is main screen (allows for multiple monitors) [red, green, blue]
Set up program draw_stuff % draw_stuff.m % % Draws stuff on the screen clear all; which_screen=0; [window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]); Vector [x1, y1, x2, y2] Which could be: [0, 0, 800, 600] For an 800 X 600 display x1= 0 y1 = 0 x2= 800 y2 = 600
Draw shape in back buffer % draw_stuff.m % % Draws stuff on the screen clear all; which_screen=0; [window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]); shape_dimensions = screen_dimensions/2; Screen(window_ptr, 'FillRect', [0,0,255], shape_dimensions); X1, Y1 Front buffer X2, Y2 Back buffer
Flip the back buffer to the front buffer % draw_stuff.m % % Draws stuff on the screen clear all; which_screen=0; [window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]); shape_dimensions = screen_dimensions/2; Screen(window_ptr, 'FillRect', [0,0,255], shape_dimensions); %Flip the buffers Screen(window_ptr,'Flip'); Front buffer Back buffer
Clear screen <<<<snip>>>> clear all; which_screen=0; [window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]); shape_dimensions = screen_dimensions/2; Screen(window_pointer, 'FillRect', [0,0,255], shape_dimensions); %Copy to main window Screen(window,'Flip'); %leave the image up for 5 seconds WaitSecs(5); %Clear screen and return control to matlab clear screen;
Tic and toc • tic starts a timer • toc tells you the number of seconds since when you ran toc
While loop • while is a type of loop that runs while a condition is true while(boolean statement) %do something many times end %you would stop repeating the loop when the %boolean statement is false OR if you use %break
While program tic loops = 0; while(toc<5) loops = loops+1; disp(['number of loops = ', num2str(loops)]); disp(['number of seconds = ', num2str(toc)]); end
While program stopping after 10 loops tic loops = 0; while(toc<5) loops = loops+1; disp(['number of loops = ', num2str(loops)]); disp(['number of seconds = ', num2str(toc)]); if(loops>=10) break; end end
Making a movie % draw_stuff.m % % Draws stuff on the screen clear all; which_screen=0; [window_ptr, screen_dimensions] …=Screen(0,'OpenWindow', [0, 0, 0]); shape_dimensions = screen_dimensions/2; Screen(window_pointer, 'FillRect', … [0,0,255], shape_dimensions);
Task 2 Make the rectangle move to the bottom of the screen at 5 pixels per frame, then move right when it hits the bottom. When it hits the right, the program ends Hint: shape_dimensions(1) is x1, (2) is y1, (3) is x2, 4 is y2
Task 3 When the rectangle hits the bottom make it change colors to red Hint: color is a 3 number vector red is [255, 0, 0]