python - Psychopy:同时创建多个线条对象

标签 python psychopy

我的代码在这里可以工作,但是我目前的方法效率很低而且很耗时。我正在生成 4 个笛卡尔坐标并将它们附加到列表中。然后我创建 4 个 Psychopy 线对象 (visual.Line) 并从我的坐标列表 (zdot_list) 中为每个对象分配一个 x,y 坐标。目前,我正在一个接一个地创建 4 行对象,并为每个“开始”参数分配一个 xy 位置。

from psychopy import visual, core, event, sound
import random
import math

win = visual.Window([800,600],color=(0,0,0), colorSpace='rgb', rgb=None, allowGUI=True, monitor='testMonitor', units='deg', fullscr=True, screen=2)

# input polar, output cartesian coords
def pol_to_cart(distance, angle, x_origin=0, y_origin=0):

    x=distance*math.cos(math.radians(angle))
    y=distance*math.sin(math.radians(angle))

    return x +x_origin, y + y_origin


zdots = 4
zdot_list = []
j=(-8)

# generate 4 xy coordinates and append to list
for i in range(zdots):

    angle=0

    line_cart = pol_to_cart(j, angle)
    dotx = line_cart[0]
    doty = line_cart[1]
    zdot_list.append([dotx, doty])

    j += .2

# generate 4 lines, add xy coordinate (from list^) to 'start' argument of each
linea = visual.Line(win, start=(zdot_list[0]), end=(4,0), lineColor="white")
lineb = visual.Line(win, start=(zdot_list[1]), end=(4,0), lineColor="white")
linec = visual.Line(win, start=(zdot_list[2]), end=(4,0), lineColor="white")
lined = visual.Line(win, start=(zdot_list[3]), end=(4,0), lineColor="white")

lines = [linea, lineb, linec, lined]

# display lines
for line in lines:
    line.draw()
    win.flip()
    core.wait(3)
    win.close()

是否有更有效的方法来使用循环创建线(或任何形状)对象?我想自动生成我需要的对象,将我的 xy 坐标分别添加到每个对象的“开始”参数。图像中只有 4 个线对象,但实际上我需要 80 多个,每个都有不同的 xy 起始坐标。

干杯, 乔恩

最佳答案

您可以尝试从视觉模块探索多边形。下面的多边形用法示例

from psychopy import visual, core, event, sound
win = visual.Window([680,480],color=(0,0,0), colorSpace='rgb', rgb=None, allowGUI=True, monitor='testMonitor', units='deg', fullscr=False, screen=2)
pgon = visual.Polygon(win, edges=4)
pgon.draw()
win.flip()

您可以通过阅读psychophy 文档来探索顶点和其他选项。

对您的代码的优化是:

zdots=40
zdot_list = []

for i in range(zdots):
    angle=0
    line_cart = pol_to_cart(j, angle)
    zdot_list.append(visual.Line(win, start=([line_cart[0], line_cart[1]]), end=(4,0), lineColor="white"))
    j += .2

for i in zdot_list:
    i.draw()

win.flip()
core.wait(3)
win.close()

关于python - Psychopy:同时创建多个线条对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44738541/

相关文章:

python - 从 HTML 页面获取带有特定关键字的 <li> - Python

Python - 在循环中使用预定义变量列表(psychopy)

python - 如何从psychopy的iohub动态重命名hdf5文件

python - 带有反馈和多个 if 循环的 Psychopy 构建器实验

Python/Psychopy : Instantiating multiple circle objects from a class

python - 不同的心理持续时间

python - 流遇到 HTTP 错误 : 403 Twitter API, 但我已提升访问权限

python - 如何对嵌套关系进行分页?

python - 查询可选参数

python - Ejabberd - 通过 Bot 发送和接收消息