如何在PsychoPy中将屏幕坐标原点(0,0)设置为左上角或左下角?
如何在PsychoPy中修改屏幕坐标原点位置
嘿,这个问题我刚好帮很多人解决过!PsychoPy默认把原点放在屏幕中心确实有时候不太符合我们的设计习惯,改成左上角或者左下角完全没问题,给你两种实用的方案:
方法1:直接通过窗口单位切换(最省心)
创建窗口时指定units参数,就能直接切换坐标系统,这是最推荐的方式:
切换到左上角原点
如果想要原点在屏幕左上角,直接把units设为'pix'就搞定了——此时x轴向右递增,y轴向下递增,完全符合很多GUI设计的习惯:
from psychopy import visual # 创建左上角为原点的窗口,尺寸设为800x600像素 win = visual.Window(size=(800, 600), units='pix', fullscr=False) # 测试:在左上角画个红色圆点(pos=(0,0)就是原点位置) red_dot = visual.Circle(win, pos=(0, 0), radius=10, fillColor='red') red_dot.draw() win.flip()
切换到左下角原点
PsychoPy没有直接预设左下角为原点的单位,但我们可以通过两种简单方式实现:
方式A:基于像素单位反转y轴
既然'pix'是左上角原点,y轴向下为正,那我们用窗口高度减去目标y值,就能得到左下角为原点的坐标:
from psychopy import visual win = visual.Window(size=(800, 600), units='pix', fullscr=False) win_height = win.size[1] # 获取窗口的高度(像素值) # 比如要在左下角(100, 100)的位置画蓝色圆点 converted_y = win_height - 100 blue_dot = visual.Circle(win, pos=(100, converted_y), radius=10, fillColor='blue') blue_dot.draw() win.flip()
方式B:用归一化单位调整坐标范围
如果习惯用相对坐标,可以用'norm'单位(默认范围是-1到1,中心为原点),把坐标整体偏移1个单位,就能让左下角变成(0,0),右上角变成(2,2):
from psychopy import visual win = visual.Window(size=(800, 600), units='norm', fullscr=False) # 此时(0,0)就是左下角,(2,2)是右上角 green_dot = visual.Circle(win, pos=(0, 0), radius=0.1, fillColor='green') green_dot.draw() win.flip()
方法2:自定义坐标转换函数(适合已有代码的场景)
如果你的实验已经写了大量基于中心原点的代码,不想全局修改窗口单位,可以写个简单的转换函数,把目标坐标转换成PsychoPy默认的中心坐标:
def top_left_to_center(pos, win_size): # pos:左上角原点的(x,y)坐标 # win_size:窗口的(width, height),比如(800,600) x, y = pos center_x = x - win_size[0]/2 center_y = win_size[1]/2 - y return (center_x, center_y) # 使用示例:把左上角(0,0)转换成中心坐标 win = visual.Window(size=(800, 600), fullscr=False) target_pos = top_left_to_center((0, 0), win.size) dot = visual.Circle(win, pos=target_pos, radius=10, fillColor='purple') dot.draw() win.flip()
要是需要转换左下角坐标,只需要调整函数里的y轴计算逻辑就行,原理是一样的~
内容的提问来源于stack exchange,提问作者Cranjis
相关产品推荐
相关产品推荐

