【问题标题】:'FillPoly' Psychtoolbox draws shapes only on one side of the screen'FillPoly' Psychtoolbox 仅在屏幕的一侧绘制形状
【发布时间】:2017-08-22 10:57:27
【问题描述】:

我正在尝试使用“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

【问题讨论】:

  • 如果不知道所有定位变量的设置,很难回答您的问题。您能否发布一个更完整的示例,其中包含足够的信息来显示三角形?
  • 您好 DMR,感谢您的来信!我现在用完整的信息更新了我的问题。很高兴听到你的想法!在此先感谢:)

标签: psychtoolbox


【解决方案1】:

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

【讨论】:

  • 您好 DMR,非常感谢您指出这一点!尝试 FramePoly 显示了该函数正在绘制的内容 - 它与复制粘贴错误一样微不足道。坐标被移位 - x 和 y 的顺序不正确。感谢您的帮助,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多