Невозможно изменить «размер» полигона при каждом повторении в Builder

#psychopy

#psychopy

Вопрос:

Я использую Builder версии v1.80.06

Я могу достаточно легко изменять положение полигона при каждом повторении

например, у меня есть список позиций

 positions=[[1,1],[1.1,0.9],...]
  

и в «Поле позиции» есть :

 $positions[0]
  

а затем измените его значение в блоке кода при каждом повторении.

НО я хочу изменить размер аналогичным образом с помощью списка $sizes, но получаю сообщение об ошибке.

Глядя на сгенерированный код, проблема находится на стадии создания объекта. сгенерированный код:

для жестко закодированного полигона (т.Е. ok)

 polygon_1 = visual.Rect(win=win, name='polygon_1',
    width=[1.5, .2][0], height=[1.5, .2][1],
    ori=0, pos=[0, -0.6],
    lineWidth=1, lineColor=[1,1,1], lineColorSpace=u'rgb',
    fillColor=[0,1,0], fillColorSpace=u'rgb',
    opacity=1,interpolate=True)
  

для одного, заполненного переменной (не работает):

 polygon_2= visual.Rect(win=win, name='polygon_2',
    width=1.0[0], height=1.0[1],
    ori=0, pos=[0,0],
    lineWidth=1, lineColor=[1,1,1], lineColorSpace=u'rgb',
    fillColor=[1,0,0], fillColorSpace=u'rgb',
    opacity=1,interpolate=True)
  

Он жалуется (справедливо), что 1.0[0] не имеет смысла в параметрах ширины и высоты

Несмотря на то, что у меня есть экземпляр моего sizes списка, созданный в блоке кода в самом начале эксперимента, вместо чтения $sizes[0] используется значение с плавающей запятой по умолчанию 1.0 .

Любые другие предложения о том, как динамически изменять размер полигона во время выполнения с помощью builder?

Я мог бы просто взять сгенерированный код и поместить его в coder, я полагаю, и устранить проблему, но я хочу передать это исследователю, поэтому хотел бы, чтобы они могли его поддерживать.

Спасибо,

Ответ №1:

Если вы задаете размер как кортеж / список с парой значений [1.2,1.5] или [1,1], это не исправит?

Комментарии:

1. Спасибо — не уверен, что я правильно вас понял. Вы имели в виду создание переменной в блоке кода — например mysize=[1.2,1.5] , а затем в форме полигона задайте размер для my_size and установки выпадающего set every repeat списка, а затем измените значение mysize в коде по мере необходимости? Ввод любой переменной в поле «размер» для объекта polygon генерирует ту же ошибку, что и выше (хотя в метке поля есть атрибут $, подразумевающий, что переменная может использоваться

Ответ №2:

Когда вы меняете атрибуты во время выполнения, просто измените атрибут существующего стимула вместо создания экземпляра полностью нового стимула. Последнее довольно сильно зависит от ресурсов, вызывая ненадежное время. Так что

 stim = visual.Rect(win)  # instantiation, ressource heavy
stim.attribute = newValue  # change attribute. lighter.
  

Я могу придумать два способа, которыми вы могли бы сделать это довольно аккуратно. Первый — явно задать ширину и высоту вместо атрибута size, но используя значение, подобное размеру. Итак (удаление всех параметров, не представляющих интереса):

 polygon_2 = visual.Rect(win)

# Unpack the x,y-sizes to the stimulus .width and .height attributes
newSize = (1.5, 0.2)
polygon_2.width, polygon_2.height = newSize
  

Второй, если атрибут size действительно важен для использования, — использовать полигин с edges=4 , чтобы сделать его прямоугольником:

 polygon_2 = visual.Polygon(win=win, edges=4, size=(1.5, 0.2))

# Setting size
polygon_2.size = (0.8, 0.4)
  

Сначала попробуйте предложение Джона. Но идея с visual.Rect and visual.Circle заключается в том, чтобы использовать заменяющие полигоны size и vertices для чего-то более подходящего. Таким образом, размер может делать неожиданные вещи, если ширина / высота и т. Д. Не равны 1.

Комментарии:

1. Джонас, я думаю, что в первоначальном сообщении говорилось об использовании Builder

2. Спасибо, Джонас. Почти на месте: если я жестко свяжу размер полигона с начальным значением и установлю его constant , я могу использовать некоторый код на Begin routine вкладке, чтобы изменить size . 2 балла: если я изменяю .width и .height явно ничего не происходит (без изменения размера, но без ошибок), но если я установил size , то размер полигона изменяется, однако, несколько озадачивает, что он игнорирует units=norm настройку, и вместо этого кажется, что он изменяет процентное масштабирование в зависимости от начальной жестко заданной настройки. например, so настройка polygon.size=[1.1,1.1] имеет другое значение.эффект, если начальное size значение изменяется. :$

3. Поведение .width and .height неудивительно, поскольку это не свойства visual . Полигоны, таким образом, просто то, что вы добавляете к объекту. Я должен проверить поведение polygon.size и вернуться к вам.