You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为PsychoPy中双圆形光栅实现试验间位置随机化?

解决PsychoPy光栅位置随机化问题

要实现每次试验中两个光栅的位置随机变化,你可以借助Python的random模块生成随机坐标,同时可按需控制光栅不重叠或不超出窗口。以下是修改后的完整代码及说明:

修改后的代码

import psychopy.visual
import psychopy.event
import random

win = psychopy.visual.Window(
    size=[1200, 600],
    units="pix",
    fullscr=False
)

# 分别创建水平、垂直光栅对象,避免复用同一对象的属性冲突
grating_h = psychopy.visual.GratingStim(
    win=win,
    units="pix",
    size=[400,400],
    sf=5.0/150.0,
    mask="circle",
    ori=0.0  # 固定水平朝向
)

grating_v = psychopy.visual.GratingStim(
    win=win,
    units="pix",
    size=[400,400],
    sf=5.0/150.0,
    mask="circle",
    ori=90.0  # 固定垂直朝向
)

# 计算安全坐标范围:保证光栅不会超出窗口边缘
x_min = - (1200//2 - 400//2)
x_max = 1200//2 - 400//2
y_min = - (600//2 - 400//2)
y_max = 600//2 - 400//2

# 生成不重叠的随机位置(如果允许重叠可跳过此函数)
def get_non_overlap_pos():
    while True:
        pos1 = [random.uniform(x_min, x_max), random.uniform(y_min, y_max)]
        pos2 = [random.uniform(x_min, x_max), random.uniform(y_min, y_max)]
        # 检查两个光栅中心距离是否大于直径,避免重叠
        distance = ((pos1[0]-pos2[0])**2 + (pos1[1]-pos2[1])**2)**0.5
        if distance > 400:
            return pos1, pos2

# 模拟多次试验(可修改循环次数)
for trial in range(5):
    # 若允许重叠,直接生成两个独立随机坐标即可
    # pos_h = [random.uniform(x_min, x_max), random.uniform(y_min, y_max)]
    # pos_v = [random.uniform(x_min, x_max), random.uniform(y_min, y_max)]
    
    # 生成不重叠位置
    pos_h, pos_v = get_non_overlap_pos()
    
    grating_h.pos = pos_h
    grating_v.pos = pos_v
    
    # 绘制并刷新窗口
    grating_h.draw()
    grating_v.draw()
    win.flip()
    
    # 按空格进入下一次试验,按ESC退出
    keys = psychopy.event.waitKeys(keyList=['space', 'escape'])
    if 'escape' in keys:
        break

win.close()

核心修改点

  • 引入random模块:实现坐标的随机生成。
  • 拆分光栅对象:避免复用同一对象时的属性覆盖问题,分别固定水平/垂直朝向,逻辑更清晰。
  • 安全坐标范围:根据窗口和光栅尺寸计算可显示的坐标区间,防止光栅超出窗口。
  • 可选的不重叠控制:通过函数循环生成位置,确保两个光栅不会重叠;若无需此限制,可直接生成独立随机坐标。
  • 多试验循环:支持多次重复试验,每次刷新随机位置,按键控制试验流程。

内容的提问来源于stack exchange,提问作者Anastasios Gratsakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:25:11