[NewRect,dh,dv]=CenterRect(rect,fixedrect) 矩形居中至某矩形
rect 待居中的矩形 fixedrect 基准矩形 NewRect 居中后矩形坐标值 dh,dv 操作完成后水平/垂直偏移量
newrect=CenterRectOnPoint(rext,x,y)/newrect=CenterRectOnPointd(rext,x,y) 矩形居中至某点
rect 待操作的矩形 x,y 基准点 newrect 新矩形坐标值
Screen('FillRect',w,color,rect) 绘制矩形 若一次性绘制多个矩形,则将其坐标值变为列的形式(4*n),若各矩形颜色不同,同理
Screen('FrameRect',w,color,rect,penwidth) 绘制空心矩形,其中penwidth为画笔宽度,默认为1个像素
绘制单个矩形 参考链接:http://peterscarfe.com/squaredemo.html
% Clear the workspace and the screen sca; close all; clearvars; % Here we call some default settings for setting up Psychtoolbox PsychDefaultSetup(2); % Get the screen numbers. This gives us a number for each of the screens % attached to our computer. % For help see: Screen Screens? screens = Screen('Screens'); % Draw we select the maximum of these numbers. So in a situation where we % have two screens attached to our monitor we will draw to the external % screen. When only one screen is attached to the monitor we will draw to % this. % For help see: help max screenNumber = max(screens); % Define black (white will be 1 and black 0). This is because % luminace values are (in general) defined between 0 and 1. % For help see: help BlackIndex black = BlackIndex(screenNumber); % Open an on screen window and color it black % For help see: Screen OpenWindow? [window, windowRect] = PsychImaging('OpenWindow', screenNumber, black); % Get the size of the on screen window in pixels % For help see: Screen WindowSize? [screenXpixels, screenYpixels] = Screen('WindowSize', window); % Get the centre coordinate of the window in pixels % For help see: help RectCenter [xCenter, yCenter] = RectCenter(windowRect); % Make a base Rect of 200 by 200 pixels. This is the rect which defines the % size of our square in pixels. Rects are rectangles, so the % sides do not have to be the same length. The coordinates define the top % left and bottom right coordinates of our rect [top-left-x top-left-y % bottom-right-x bottom-right-y]. The easiest thing to do is set the first % two coordinates to 0, then the last two numbers define the length of the % rect in X and Y. The next line of code then centers the rect on a % particular location of the screen. baseRect = [0 0 200 200]; % Center the rectangle on the centre of the screen using fractional pixel % values. % For help see: CenterRectOnPointd centeredRect = CenterRectOnPointd(baseRect, xCenter, yCenter); % Set the color of our square to full red. Color is defined by red green % and blue components (RGB). So we have three numbers which % define our RGB values. The maximum number for each is 1 and the minimum % 0. So, "full red" is [1 0 0]. "Full green" [0 1 0] and "full blue" [0 0 % 1]. Play around with these numbers and see the result. rectColor = [1 0 0]; % Draw the square to the screen. For information on the command used in % this line see Screen FillRect? Screen('FillRect', window, rectColor, centeredRect); % Flip to the screen. This command basically draws all of our previous % commands onto the screen. See later demos in the animation section on more % timing details. And how to demos in this section on how to draw multiple % rects at once. % For help see: Screen Flip? Screen('Flip', window); % Now we have drawn to the screen we wait for a keyboard button press (any % key) to terminate the demo. % For help see: help KbStrokeWait KbStrokeWait; % Clear the screen. "sca" is short hand for "Screen CloseAll". This clears % all features related to PTB. Note: we leave the variables in the % workspace so you can have a look at them if you want. % For help see: help sca sca;
绘制不同颜色的相等大小的多个矩形 参考链接:http://peterscarfe.com/multiplesquaresdemo.html
% Open an on screen window [window, windowRect] = PsychImaging('OpenWindow', screenNumber, black); % Get the size of the on screen window [screenXpixels, screenYpixels] = Screen('WindowSize', window); % Get the centre coordinate of the window [xCenter, yCenter] = RectCenter(windowRect); % Make a base Rect of 200 by 200 pixels baseRect = [0 0 200 200]; % Screen X positions of our three rectangles squareXpos = [screenXpixels * 0.25 screenXpixels * 0.5 screenXpixels * 0.75]; numSqaures = length(squareXpos); % Set the colors to Red, Green and Blue allColors = [1 0 0; 0 1 0; 0 0 1]; % Make our rectangle coordinates allRects = nan(4, 3); for i = 1:numSqaures allRects(:, i) = CenterRectOnPointd(baseRect, squareXpos(i), yCenter); end % Draw the rect to the screen Screen('FillRect', window, allColors, allRects); % Flip to the screen Screen('Flip', window);
绘制不同颜色的大小不等的多个矩形 参考链接:http://peterscarfe.com/differentsquaresdemo.html
% Open an on screen window [window, windowRect] = PsychImaging('OpenWindow', screenNumber, black); % Get the size of the on screen window [screenXpixels, screenYpixels] = Screen('WindowSize', window); % Get the centre coordinate of the window [xCenter, yCenter] = RectCenter(windowRect); % Make a base Rect of 200 by 200 pixels baseRect = [0 0 200 200]; % Screen X positions of our three rectangles squareXpos = [screenXpixels * 0.25... screenXpixels * 0.5 screenXpixels * 0.75]; numSqaures = length(squareXpos); % Set the colors to Red, Green and Blue allColors = [1 0 0; 0 1 0; 0 0 1]; % Make a multiplier to modulate the size of our squares sizeChanger = [0.7 1 1.3]; % Make our rectangle coordinates allRects = nan(4, 3); for i = 1:numSqaures allRects(:, i) = CenterRectOnPointd(baseRect .* sizeChanger(i),... squareXpos(i), yCenter); end % Draw the rect to the screen Screen('FillRect', window, allColors, allRects); % Flip to the screen Screen('Flip', window);
绘制空心矩形 参考链接:http://peterscarfe.com/framedsquaresdemo.html
% Open an on screen window [window, windowRect] = PsychImaging('OpenWindow', screenNumber, black); % Get the size of the on screen window [screenXpixels, screenYpixels] = Screen('WindowSize', window); % Get the centre coordinate of the window [xCenter, yCenter] = RectCenter(windowRect); % Make a base Rect of 200 by 200 pixels baseRect = [0 0 200 200]; % Screen X positions of our three rectangles squareXpos = [screenXpixels * 0.25 screenXpixels * 0.5 screenXpixels * 0.75]; numSquares = length(squareXpos); % Set the colors to Red, Green and Blue allColors = [1 0 0; 0 1 0; 0 0 1]; % Make our rectangle coordinates allRects = nan(4, 3); for i = 1:numSquares allRects(:, i) = CenterRectOnPointd(baseRect, squareXpos(i), yCenter); end % Pen width for the frames penWidthPixels = 6; % Draw the rect to the screen Screen('FrameRect', window, allColors, allRects, penWidthPixels); % Flip to the screen Screen('Flip', window);