PTB 中,最核心的一个函数是 Screen 函数,许多功能都要通过它来实现。

老套路,遇到一个函数,都是先 help 一下看看它的具体用法与功能介绍。

>> help Screen

Screen is a MEX file for precise control of the video display. Screen has

many functions; type "Screen" for a list:

Screen

For explanation of any particular screen function, just add a question

mark "?". E.g. for 'OpenWindow', try either of these equivalent forms:

Screen('OpenWindow?')

Screen OpenWindow?

上面截取了一部分 help 后的文本说明。解释下其中几条关键信息:

MEX file, 这是说 Screen 函数是一个 Matlab 可执行文件,你可以把它理解为用 C 程序语言写出来的一个函数。

Screen has many functions, Screen 可以做很多事情,它是一个多功能的函数。PTB 把几乎所有与屏幕显示有关的事情都交给这个函数了。

可以将这个函数理解为一个机器人,这个机器人可以做有关屏幕显示内容的事情。但是需要用这个机器人能听得懂的方式下达指令。

这个机器人(Screen 函数)具体能做哪些事情?我们不太可能全部都记下来,只能每次都问问它。问它可以做哪些事情,只要在命令行窗口里输入 Screen 就可以了。

>> Screen

Screen('DrawLine', windowPtr [,color], fromH, fromV, toH, toV [,penWidth]);

Screen('DrawArc',windowPtr,[color],[rect],startAngle,arcAngle)

Screen('FrameArc',windowPtr,[color],[rect],startAngle,arcAngle[,penWidth] [,penHeight] [,penMode])

Screen('FillArc',windowPtr,[color],[rect],startAngle,arcAngle)

Screen('FillRect', windowPtr [,color] [,rect] );

Screen('FrameRect', windowPtr [,color] [,rect] [,penWidth]);

Screen('FillOval', windowPtr [,color] [,rect] [,perfectUpToMaxDiameter]);

Screen('FrameOval', windowPtr [,color] [,rect] [,penWidth] [,penHeight] [,penMode]);

Screen('FramePoly', windowPtr [,color], pointList [,penWidth]);

Screen('FillPoly', windowPtr [,color], pointList [, isConvex]);

截取了一段输出结果,以 Screen('DrawLine', windowPtr [,color], fromH, fromV, toH, toV [,penWidth]); 为例。

第一个单引号里面 DrawLine,其实就是 Screen 函数可以做的一件事情。但这个到底是干什么的?怎么用?

要看某一个具体的 Screen function 有什么用以及怎么用,可以在相应 “ 功能词 ” 后面加一个 ? 获得说明。举个例子,看看 DrawLine 的介绍:

>> Screen DrawLine?

Usage:

Screen('DrawLine', windowPtr [,color], fromH, fromV, toH, toV [,penWidth]);

Draw a line. "color" is the clut index (scalar or [r g b a] vector) that you

want to poke into each pixel; default produces black. "fromH" and "fromV" are

the starting x and y positions, respectively. "toH" and "toV" are the ending x

and y positions, respectively. Default "penWidth" is 1.

See also: DrawLines

>>

这段说明文字,很清楚地说明了,它是用来画一条线的,可以给它指定颜色,起点、终点以及线条的粗细等特征。

请大家自己再阅读一下 Screen 命令的说明,自己在命令行窗口中多试着了解下其他的功能。

好了,善用这两个命令,可以说我们的进度槽大涨,离最终目标不太远了。

在继续之前,还需要先了解一下 PTB 是怎么精确控制图形显示的,这对我们后面使用 Screen 函数有帮助。

PTB 利用 double buffering 辅以 VBL Synchronization 技术来控制图形显示并计时(实际上,E-prime 也是用的这种办法)。

double buffering 先设定两帧图像,一帧称为前景图,一帧称为背景图。前景图是可见的,背景图不可见,如下图:

double buffering 的前景与背景

接下来,先在背景图上写内容:

draw on back

然后,通过一个 Flip 动作,将背景翻转为前景,同时清空背景内容:

图片6.png

这样循环往复,一帧一帧的图像就显示出来。

PTB 利用另外一个叫作 VBL Synchronization 的方式完成 Flip 动作并计时。

我们知道,计算机显示器有一个很关键的参数是显示频率,比如,大多数笔记本电脑的屏幕显示频率是 60 HZ,意味着每秒显示 60 帧图像。用图来表示,就是下面这样子的:

图像显示示意图

显然,每两帧图像之间就有时间差,称这个时间差为VBL(Vertical BLank interval). 对于 60 HZ 的显示器,我们可以估算 VBL 值,大约为 16.67 ms. 有了这个信息,上面的图就可以用下面这个图来表示:

图像显示示意图

PTB 的 “Flip” 动作就在 VBL 中完成,计时也是以 VBL 为基准的。所以,我们可以看到,如果没有辅助其他计时工具,仅使用 E-prime 或者 PTB 的方式做实验,时间精度不可能做到低于16 毫秒。我个人认为,计时精度在 50 毫秒以上才比较可靠。除非,用了高刷新率的显示器。

matlab中screen函数,13 PTB Screen 函数相关推荐

  1. MatLab中的多项式拟合(lsqcurvefit函数的非线性曲线拟合)

    MatLab中的多项式拟合(lsqcurvefit函数的非线性曲线拟合) lsqcurvefit函数 函数原型 x=lsqcurvefit(fun, x0, xdata, ydata) == 其中的参 ...

  2. matlab得到计算机时间,Matlab中处理日期与时间的函数

    Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示 ...

  3. 将函数当做参数 matlab,Matlab中如何将(自定义)函数作为参数传递给另一个函数...

    假如我们编写了一个积分通用程序,想使它更具有通用性,那么可以把被积函数也作为一个参数.在c/c++中,可以使用函数指针来实现上边的功能,在matlab中如何实现呢?使用函数句柄--这时类似于函数指针的 ...

  4. matlab中饼图绘制程序,MATLAB中绘制二维饼图的函数是(? ? ) (1.5分)

    MATLAB中绘制二维饼图的函数是(? ? ) (1.5分) 答:pie 计算机的内存储器比外存储器读写速度 ______ 答:快 新民主主义革命时期,提出了反帝反封建这个任务就等于真正懂得了什么叫反 ...

  5. MatLab中rand randi randn 三个函数的解析

    MatLab中rand randi randn 三个函数的解析 1.rand 概括:生成(0,1)之间的均匀分布的伪随机数 示例1: >>rand %什么参数也没有,生成一个(0,1)的数 ...

  6. Matlab中一维和二维滤波函数及其典型用法【随时更新】

    Matlab中一维和二维滤波函数及其典型用法[随时更新] 一维滤波函数 均值滤波器movmean 中值滤波器movmedian 二维滤波函数 用fspecial预定义各种二维滤波器 主要用于自查,如果 ...

  7. matlab对数收益直方图,科学网—MATLAB中绘制数据直方图的新函数histogram2 - 王福昌的博文...

    MATLAB中有命令hist3() 可以绘制直方图,竖坐标是频数,这与一些教科书中用纵轴表示频率的做法不一致,有些时候不便于使用.当然,使用者可以自己编写定制能够在纵轴绘出频率的直方图.在MATLAB ...

  8. matlab中用于小数取整的函数的用法

    matlab中小数取整的函数大约有四个:floor.ceil.round.fix 若 A = [-2.0, -1.9, -1.55, -1.45, -1.1, 1.0, 1.1, 1.45, 1.55 ...

  9. matlab变量区表示函数,MATLAB中的工作区,变量和函数

    本文概述 工作空间 工作区包含我们在MATLAB中工作时创建的所有变量. 每当我们为变量分配值时, 它都会自动在工作空间中获取空间. 关闭环境后, 工作空间变量将消失, 因此请将这些变量保存在文件中以 ...

  10. matlab中plot同时绘制两个函数时向量长度不一致的解决办法

    在同一张图上绘制函数及其导数的图形的时候遇到的问题:求导数需要diff函数,众所周知,diff函数计算的是差值,出来的向量比原向量维数少1,导致用一个plot绘制的时候会报错 matlab中绘图时遇到 ...

最新文章

  1. Exchange 2013 合规性管理之日记规则
  2. GTD (Getting Things Done)时间管理 提高效率 简介
  3. python比较好的书籍推荐-推荐几本2019年初学者学习Python最佳书籍!
  4. Windows下使用xShell向远程Linux上传文件
  5. c语言复制的代码不能运行,刚学C语言,在Linux下写的代码能正常编译,复制到VC下就无法运行...
  6. BZOJ 1305 [CQOI2009]dance跳舞
  7. 公路多孔箱涵设计_涵洞设计,设计师可参考~
  8. ModelDriven机制及其运用
  9. 双重特异性酪氨酸磷酸化调节激酶1A行业调研报告 - 市场现状分析与发展前景预测
  10. 奇安信RSA观察|RSAC应用安全技术新风向
  11. 【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
  12. [osg][原创]osg多屏幕显示,会出现透明需要设置的问题
  13. SSM框架面试题及答案整理
  14. gitlab 使用配置
  15. python ipaddr库_python访问纯真IP数据库的代码
  16. 记DeeCamp 2019夏面试
  17. 耐得寂寞,拥得繁华 (转)
  18. 企业邮箱大全,企业邮箱查询,最大的邮箱是哪个?
  19. 中国视频点播vod系统 v4.2 build 2002.09.21 是什么
  20. 手写代码(笔试面试真题)

热门文章

  1. Canvas动画案例演示,含动画猫、变幻线、代码雨等
  2. 洛谷刷题C语言:CRNE、CETIRI、PRASE
  3. Oracle的软解析(soft prase)和硬解析(hard prase)及绑定变量
  4. STAR法则修改简历
  5. 37手游基于云平台的大数据建设实践
  6. PMP考试 工作绩效数据 工作绩效信息 工作绩效报告 区别与联系
  7. python word 表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
  8. 使用Laya引擎开发微信小游戏(上)
  9. 学生们共被分为10个等级,包括学魔、学神、学霸、学痞、学弱^
  10. C#自学29—简体字繁体字转换