Matlab Class 2

Download Report

Transcript Matlab Class 2

Matlab Class 2
Xiaotao Su, Ph.D.
Visual Psychophysicist & IT Group Leader
Rutgers Center for Cognitive Science (RuCCS)
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
h
e
l
l
o
w
o
r
(1) (2) (3) (4) (5) (6) (7) (8) (9)
35
26.3
11
4
(1)
(2)
(3)
(4)
l
d
(10) (11)
RuCCS
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
RuCCS
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
RuCCS
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(num1num2)]);
RuCCS
boolean expressions
• Boolean expressions either return
1 for true
or
0 for false
• Possible operators:
==
>
>=
<
<=
&
equals
greater
than
greater less than greater and
than or
than or
equal to
equal to
|
or
RuCCS
•
•
•
•
•
•
•
1==1
(1 + 1)==2
(5 + 5) < 10
(5 + 5) <=10
(1 == 1) & (2==3)
(1 == 1) | (2==3)
5 + (5 < 10)
Note: Put operations inside
parenthesis so they are
preformed first.
==
>
>=
<
<=
&
equals
greater
than
greater less than greater and
than or
than or
equal to
equal to
|
or
RuCCS
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
RuCCS
Back to math.m
if ( (round(num1)==num1) & (round(num2)==num2) )
disp('num1 and num2 are integers')
end
RuCCS
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
RuCCS
Task 1
• Have math.m tell me which number is larger then the other
“the biggest number is …”
==
>
>=
<
<=
&
equals
greater
than
greater less than greater and
than or
than or
equal to
equal to
|
or
RuCCS
Screen drawing and psychtoolbox
Origin
Screen Geometry
X ----------- Positive ->
Y
Positive
Coordinates are
measured in
pixels.
Max X and Y
RuCCS
How you typically work with the psychtoolbox
Back Buffer
(invisible)
Front Buffer
RuCCS
How you typically work with the psychtoolbox
Step 1: Draw
Shape to the
back buffer
Front Buffer
RuCCS
How you typically work with the psychtoolbox
Step 2:
Flip the back buffer
to the front buffer
RuCCS
How you typically work with the psychtoolbox
Back Buffer is automatically cleared
RuCCS
How you typically work with the psychtoolbox
Now you can
continue with
your next
frame of
animation
RuCCS
How you typically work with the psychtoolbox
Flip the back buffer
to the front buffer
RuCCS
How you typically work with the psychtoolbox
Back Buffer is automatically cleared
RuCCS
Set up program draw_stuff
% draw_stuff.m
%
% Draws stuff on the screen
RuCCS
Initialize the main window
% draw_stuff.m
%
% Draws stuff on the screen
clear all;
which_screen=0;
RuCCS
Set up program draw_stuff
% draw_stuff.m
%
% Draws stuff on the screen
0
clear all;
which_screen=0;
[window_ptr, screen_dimensions]
=Screen(0,'OpenWindow', [0, 0, 0]);
0 is main screen
(allows for multiple
monitors)
Command issued
to the
psychtoolbox
Screen function
Vector specifying
Screen color
[red, green, blue]
RuCCS
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]);
x1= 0
y1 = 0
Vector [x1, y1, x2, y2]
Which could be:
[0, 0, 800, 600]
For an 800 X 600 display
x2= 800 y2 = 600
RuCCS
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
RuCCS
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
RuCCS
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;
RuCCS
Tic and toc
• tic starts a timer
• toc tells you the number of seconds since when you ran toc
RuCCS
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
RuCCS
While program
tic
loops = 0;
while(toc<5)
loops = loops+1;
disp(['number of loops = ', num2str(loops)]);
disp(['number of seconds = ', num2str(toc)]);
end
RuCCS
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);
RuCCS
RuCCS
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
RuCCS
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]