四角形の描画

help PsychRects の内容を理解するためのサンプルプログラムを作りました。

(ArrangeRectsについては私がよく理解できなかったので省略しています)

末尾にセミコロンのついていない行の実行結果はコマンドウィンドウに出力されます。

プログラムの結果を、描画される四角形と、コマンドウィンドウの両方で確認すると理解が深まると思います。

rect1とrect2が基準となる四角形で、それぞれ赤と緑で描画されます。

rect3は、help PsychRectsで解説されている関数を使って作成された四角形で、青で描画されます。

% ○○の動作確認。次のn行。

のようなコメントがあると思います。

該当する部分のコメントを解除して、実行してください。

以下の初期の状態では、AdjoinRectの動作確認をするようになっています。

もし、CenterRectの動作確認をしたいときには、

rect3 = AdjoinRect(rect1, rect2, RectBottom)

をコメントアウトして、

rect3 = CenterRect(rect1, rect2)

のコメントを解除してください。

function myRectTest
ListenChar(2);
AssertOpenGL;
KbName('UnifyKeyNames');
%myKeyCheck;
try
    screenNumber = max(Screen('Screens'));
    %ウィンドウでの呈示
    [windowPtr, windowRect] = Screen('OpenWindow', screenNumber, [255 255 255], [100, 100, 700, 600]);
    %フルスクリーンでの呈示
    %[windowPtr, windowRect] = Screen('OpenWindow', screenNumber, [255 255 255]);
   
    %基準の四角形1
    rect1 = [0 0 99 50]
    Screen('FillRect', windowPtr, [255 0 0], rect1);
   
    %基準の四角形2
    rect2 = [50 200 200 300]
    Screen('FillRect', windowPtr, [0 255 0], rect2);
   
    % AdjoinRectの動作確認。次の1行。
    rect3 = AdjoinRect(rect1, rect2, RectBottom)
 
    % AlignRectの動作確認。次の1行。
%     rect3 = AlignRect(rect1, rect2, 'center', 'top')
    % CenterRectの動作確認。次の1行。
%     rect3 = CenterRect(rect1, rect2)
   
    % CenterRectOnPoint と RectCenterの動作確認。次の2行。
%     rect3 = CenterRectOnPoint(rect1, 250, 100)
%     [cx, cy] = RectCenter(rect3)
    % CenterRectOnPointd と RectCenterの動作確認。次の2行。
%     rect3 = CenterRectOnPointd(rect1, 250, 100)
%     [cx, cy] = RectCenter(rect3)
    % OffsetRectとClipRectの動作確認。次の3行。
%     rect3 = OffsetRect(rect1, 70, 180)
%     rect4 = ClipRect(rect1, rect2)
%     rect5 = ClipRect(rect2, rect3)
   
    % IsEmptyRectの動作確認。次の4行。
%     rect3 = [100 70 50 80]
%     a = IsEmptyRect(rect3)
%     rect3 = [100 70 150 80]
%     b = IsEmptyRect(rect3)
   
    % InsetRectの動作確認。次の3行。
%     rect3 = InsetRect(rect1, 5, 10)  
%     a = IsInRect(50, 20, rect3)
%     b = IsInRect(50, 100, rect3)
   
    % RectLeft, RectTop, RectRight, RectBottom, RectWidth, RectHeightの動作確認。次の8行。
%     rect3 = OffsetRect(rect1, 70, 180)
%     RL = rect3(RectLeft)
%     RT = rect3(RectTop)
%     RR = rect3(RectRight)
%     RB = rect3(RectBottom)
%     [cx, cy] = RectCenter(rect3)
%     RW = RectWidth(rect3)
%     RH = RectHeight(rect3)
   
    % RectOfMatrixの動作確認。次の2行。行数が長方形の高さ、列数が長方形の幅になることに注意。
%     tmp = ones(100, 80);
%     rect3 = RectOfMatrix(tmp)
    % ScaleRectとSizeOfRectの動作確認。次の2行。行数が長方形の高さ、列数が長方形の幅になることに注意。
%     rect3 = ScaleRect(rect2, 2, 1.5)
%     a = SizeOfRect(rect3)
   
    % UnionRectの動作確認。次の1行。
%     rect3 = UnionRect(rect1, rect2)
    % rect3の描画
    Screen('FillRect', windowPtr, [0 0 255], rect3);
   
    Screen('Flip', windowPtr);
    KbWait;
   
   
    Screen('CloseAll');
    ListenChar(0);
catch
    Screen('CloseAll');
    ListenChar(0);
    psychrethrow(psychlasterror);
end;