0

我正在尝试使用“FillPoly”在 Psychtoolbox 中绘制三角形。三角形的数量因试验而异,最小。3 和最大。屏幕上有 10 个三角形。三角形围绕一个假想的圆圈均匀分布。每次试验最多 6 个对象,三角形绘制得很好。从屏幕上的 7 个对象开始,屏幕左侧不再绘制三角形。在屏幕的右侧,它们工作正常。

有谁知道可能导致问题的原因?先感谢您!

代码中的 3 个相关位:首先,设置项目的坐标

   angles(1) = 270;% the position of the first item
   %setSize(i) = number of items on screen for trial i

   step = 360/setSize(i);%other items are positioned in relation to the first

   for u = 2:setSize(i),
    angles(u) = angles(u-1) + step;    % defining the circle points by the          angles (first point is already fixed by first angle)
end


% for the triangles
anglesDegtri = linspace(0, 360, 3 + 1);
anglesRadtri = anglesDegtri * (pi / 180);
for j = 1:(setSize(i))
    Xvalue = cosd(angles(j))*expinfo.radius + expinfo.x;    % coordinate of the center of the object on the screen
    Yvalue = sind(angles(j))*expinfo.radius + expinfo.y;
    circlevalue(j, 1) = Xvalue- expinfo.radi;            % defining the points on the axes for each circle (adding and subtracting the radius to get 4 points per circle)
    circlevalue(j, 2) = Yvalue- expinfo.radi;
    circlevalue(j, 3) = Xvalue+ expinfo.radi;
    circlevalue(j, 4) = Yvalue+ expinfo.radi;


    xx(j) = (circlevalue(j,1)+circlevalue(j,3))/2; %x of each item in set size
    yy(j) = (circlevalue(j,2)+circlevalue(j,4))/2; %y of each item in set size

end
xx = xx(1,:);
yy = yy(1,:);

我预先计算了三角形的坐标。“设置大小”是给定试验中屏幕上的刺激量,可能在 3 到 10 之间变化

%precalculating vectors for all possible triangle positions
    if setSize(i) == 3
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3];
    elseif setSize(i) == 4
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector4 = sin(anglesRadtri) .* expinfo.radi2 + yy(4);
        trixPosVector4 = cos(anglesRadtri) .* expinfo.radi2 + xx(4);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3; triyPosVector4];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3; trixPosVector4];
    elseif setSize(i) == 5
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector4 = sin(anglesRadtri) .* expinfo.radi2 + yy(4);
        trixPosVector4 = cos(anglesRadtri) .* expinfo.radi2 + xx(4);
        triyPosVector5 = sin(anglesRadtri) .* expinfo.radi2 + yy(5);
        trixPosVector5 = cos(anglesRadtri) .* expinfo.radi2 + xx(5);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3; triyPosVector4; triyPosVector5];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3; trixPosVector4; trixPosVector5];
    elseif setSize(i) == 6
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector4 = sin(anglesRadtri) .* expinfo.radi2 + yy(4);
        trixPosVector4 = cos(anglesRadtri) .* expinfo.radi2 + xx(4);
        triyPosVector5 = sin(anglesRadtri) .* expinfo.radi2 + yy(5);
        trixPosVector5 = cos(anglesRadtri) .* expinfo.radi2 + xx(5);
        triyPosVector6 = sin(anglesRadtri) .* expinfo.radi2 + yy(6);
        trixPosVector6 = cos(anglesRadtri) .* expinfo.radi2 + xx(6);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3; triyPosVector4; triyPosVector5; triyPosVector6];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3; trixPosVector4; trixPosVector5; trixPosVector6];
    elseif setSize(i) == 7
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector4 = sin(anglesRadtri) .* expinfo.radi2 + yy(4);
        trixPosVector4 = cos(anglesRadtri) .* expinfo.radi2 + xx(4);
        triyPosVector5 = sin(anglesRadtri) .* expinfo.radi2 + yy(5);
        trixPosVector5 = cos(anglesRadtri) .* expinfo.radi2 + xx(5);
        triyPosVector6 = sin(anglesRadtri) .* expinfo.radi2 + yy(6);
        trixPosVector6 = cos(anglesRadtri) .* expinfo.radi2 + xx(6);
        triyPosVector7 = sin(anglesRadtri) .* expinfo.radi2 + yy(7);
        trixPosVector7 = cos(anglesRadtri) .* expinfo.radi2 + xx(7);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3; triyPosVector4; triyPosVector5; triyPosVector6; triyPosVector7];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3; trixPosVector4; trixPosVector5; trixPosVector6; triyPosVector7];
    elseif setSize(i) == 8
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector4 = sin(anglesRadtri) .* expinfo.radi2 + yy(4);
        trixPosVector4 = cos(anglesRadtri) .* expinfo.radi2 + xx(4);
        triyPosVector5 = sin(anglesRadtri) .* expinfo.radi2 + yy(5);
        trixPosVector5 = cos(anglesRadtri) .* expinfo.radi2 + xx(5);
        triyPosVector6 = sin(anglesRadtri) .* expinfo.radi2 + yy(6);
        trixPosVector6 = cos(anglesRadtri) .* expinfo.radi2 + xx(6);
        triyPosVector7 = sin(anglesRadtri) .* expinfo.radi2 + yy(7);
        trixPosVector7 = cos(anglesRadtri) .* expinfo.radi2 + xx(7);
        triyPosVector8 = sin(anglesRadtri) .* expinfo.radi2 + yy(8);
        trixPosVector8 = cos(anglesRadtri) .* expinfo.radi2 + xx(8);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3; triyPosVector4; triyPosVector5; triyPosVector6; triyPosVector7; triyPosVector8];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3; trixPosVector4; trixPosVector5; trixPosVector6; triyPosVector7; triyPosVector8];

    elseif setSize(i) == 9
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector4 = sin(anglesRadtri) .* expinfo.radi2 + yy(4);
        trixPosVector4 = cos(anglesRadtri) .* expinfo.radi2 + xx(4);
        triyPosVector5 = sin(anglesRadtri) .* expinfo.radi2 + yy(5);
        trixPosVector5 = cos(anglesRadtri) .* expinfo.radi2 + xx(5);
        triyPosVector6 = sin(anglesRadtri) .* expinfo.radi2 + yy(6);
        trixPosVector6 = cos(anglesRadtri) .* expinfo.radi2 + xx(6);
        triyPosVector7 = sin(anglesRadtri) .* expinfo.radi2 + yy(7);
        trixPosVector7 = cos(anglesRadtri) .* expinfo.radi2 + xx(7);
        triyPosVector8 = sin(anglesRadtri) .* expinfo.radi2 + yy(8);
        trixPosVector8 = cos(anglesRadtri) .* expinfo.radi2 + xx(8);
        triyPosVector9 = sin(anglesRadtri) .* expinfo.radi2 + yy(9);
        trixPosVector9 = cos(anglesRadtri) .* expinfo.radi2 + xx(9);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3; triyPosVector4; triyPosVector5; triyPosVector6; triyPosVector7; triyPosVector8; triyPosVector9];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3; trixPosVector4; trixPosVector5; trixPosVector6; triyPosVector7; triyPosVector8; triyPosVector9];

    elseif setSize(i) == 10
        triyPosVector1 = sin(anglesRadtri) .* expinfo.radi2 + yy(1);
        trixPosVector1 = cos(anglesRadtri) .* expinfo.radi2 + xx(1);
        triyPosVector2 = sin(anglesRadtri) .* expinfo.radi2 + yy(2);
        trixPosVector2 = cos(anglesRadtri) .* expinfo.radi2 + xx(2);
        triyPosVector3 = sin(anglesRadtri) .* expinfo.radi2 + yy(3);
        trixPosVector3 = cos(anglesRadtri) .* expinfo.radi2 + xx(3);
        triyPosVector4 = sin(anglesRadtri) .* expinfo.radi2 + yy(4);
        trixPosVector4 = cos(anglesRadtri) .* expinfo.radi2 + xx(4);
        triyPosVector5 = sin(anglesRadtri) .* expinfo.radi2 + yy(5);
        trixPosVector5 = cos(anglesRadtri) .* expinfo.radi2 + xx(5);
        triyPosVector6 = sin(anglesRadtri) .* expinfo.radi2 + yy(6);
        trixPosVector6 = cos(anglesRadtri) .* expinfo.radi2 + xx(6);
        triyPosVector7 = sin(anglesRadtri) .* expinfo.radi2 + yy(7);
        trixPosVector7 = cos(anglesRadtri) .* expinfo.radi2 + xx(7);
        triyPosVector8 = sin(anglesRadtri) .* expinfo.radi2 + yy(8);
        trixPosVector8 = cos(anglesRadtri) .* expinfo.radi2 + xx(8);
        triyPosVector9 = sin(anglesRadtri) .* expinfo.radi2 + yy(9);
        trixPosVector9 = cos(anglesRadtri) .* expinfo.radi2 + xx(9);
        triyPosVector10 = sin(anglesRadtri) .* expinfo.radi2 + yy(10);
        trixPosVector10 = cos(anglesRadtri) .* expinfo.radi2 + xx(10);
        triyPosVector = [triyPosVector1; triyPosVector2; triyPosVector3; triyPosVector4; triyPosVector5; triyPosVector6; triyPosVector7; triyPosVector8; triyPosVector9; triyPosVector10];
        trixPosVector = [trixPosVector1; trixPosVector2; trixPosVector3; trixPosVector4; trixPosVector5; trixPosVector6; triyPosVector7; triyPosVector8; triyPosVector9; triyPosVector10];

    end

%then I draw the stimuli on the screen. 

    for pos = 1:setSize(i)  % Drawing the stimuli

            % Draw a triangle
            Screen('FillPoly', expinfo.w, expinfo.colors(trial(i).memoryColors(pos), :), [trixPosVector(pos, :); triyPosVector(pos, :)]', 2);


    end
4

1 回答 1

0

多边形 7 - 10 的点当前正以线的形式绘制到屏幕上。如果将“FillPoly”更改为“FramePoly”,您可以看到它们的位置。FillPoly 命令不显示它们,因为作为一条直线,没有要填充的区域。我还没有通读您用来放置三角形的所有几何逻辑,但是关于如何确定三角形 7 - 10 的算法似乎存在问题。

于 2017-08-24T21:50:02.593 回答