心理应用工具包 psychtoolbox 绘制小球走迷宫

psychtoolbox 是 MATLAB 中的一个工具包,对于科研人员设计实验范式来说是不二之选,因为它可以操作计算机的底层硬件,精度可以达到帧的级别。


文章目录

  • 一、实验目的
  • 二、psychtoolbox 的下载安装
  • 三、Psychtoolbox 的基本使用
  • 四、完整代码

一、实验目的

我们的目的是设计出一个迷宫(网格线上的一条路径),使得小球每隔3s就移动一格,当然每次小球移动的对错概率都是我们自己实现设定好的。
在这里插入图片描述

二、psychtoolbox 的下载安装

  1. 首先在BING搜索,认准第一个org结尾的官网,可以进入官网,也可以直接点击下方的“Download”,跳转到下载界面。
    在这里插入图片描述
  2. 进入到下载界面后,按照下图中的三个步骤(第一步可不做,如果是第一次安装)。
    在这里插入图片描述

(1)下面是第二步,点击这里可下载gstreamer,按照指引一步步安装即可。在这里插入图片描述
(2)下载zip,将压缩包的子文件夹里的所有文件都拖入到一个新建的“toolbox”文件夹里。
在这里插入图片描述

处理完之后像下图一样就对了。在这里插入图片描述

  1. 进入MATLAB,打开到刚才的toolbox->Psychtoolbox 路径。
    在这里插入图片描述
  2. 在命令行中输入 SetupPsychtoolbox ,回车,等待即可,中间需要一路回车进行。最后出现“Success,Enjoy”等字样即安装成功。可以继续在命令行使用 Screen来测试是否安装成功。

三、Psychtoolbox 的基本使用

  1. 基本原理
    首先它是通过一帧一帧翻转窗口来实现所谓的动态效果,所以我们的逻辑基本就是先在画布上绘制下一帧的画面,然后翻转。
    可以自行到官网找到参考文档,网络上所有文章基本都是从那里复制出来的,并且还可以看到官网提供的Demos。在这里插入图片描述

  2. 这里提供几个常使用到的函数:

/* 开头需要加的。 */
Screen('Preference', 'SkipSyncTests', 1);
Screen('Preference','SkipSyncTests',2);/* 隐藏鼠标。 */
HideCursor;/* 函数功能:新建一个窗口。* 返回值:w,窗口的句柄;* 返回值:wrect,主要用来获取屏幕的长宽。* 参数:命令,可在命令行“help Screen”获取帮助文档或者直接到官网。* 参数:第n个屏幕,一般无扩展屏的话直接默认0.* 参数:颜色,窗口的RGB数组。这里是黑色。*/
[w, wrect] = Screen('OpenWindow', 0, [0, 0, 0]);/* 写文本。一般进行心理实验之前需要一段引导语。* 参数:imread后面为图片的路径。*/
instruction=Screen('MakeTexture',w,imread('xxx\xxx\xx.tif'));
Screen('DrawTexture',w,instruction,[]);%显示提示语/* 函数功能:画直线。* 返回值:无* 参数:命令,画直线、画圆等等。* 参数:窗口的句柄,按之前来讲就是w。* 参数:颜色。* 参数:后面四个参数依次为x轴起点坐标、y轴起点坐标、x轴终点坐标、y轴终点坐标。* 参数:线宽。*/
Screen(‘DrawLine’, windowPtr [,color], fromH, fromV, toH, toV [,penWidth]);/* 函数功能:画实心圆。* 返回值:无* 参数:命令。* 参数:窗口的句柄。* 参数:颜色。* 参数:后面四个参数依次为圆的左、上、右、下边界坐标。*/
Screen(‘FillOval’, windowPtr [,color] [,rect] [,perfectUpToMaxDiameter]);/* 翻转。每次绘制完画布都要进行一次翻转,这样新绘制的场景才能显示出来。重要!!! */
Screen('Flip',w)/* 延时函数,单位:秒。*/
WaitSecs();/* 按键检测。以下是一个退出机制,按下Esc键退出。27对应Esc键的ASCII值。*/
while true[keyIsDown,~,keyCode]=KbCheck;if keyCode(27)break;end
end/* 关闭窗口,搭配上面的退出机制使用。*/
Screen('CloseAll');/* 常用的颜色RGB值。*/
color_red = [255,0,0];
color_white = [255, 255, 255];
color_black = [0, 0, 0];
color_yellow = [255, 255, 0];

四、完整代码

  1. 功能逻辑通过一个哈希表来一一映射小球每一步的正确、错误情况。
decision_hashmap = zeros(1, 100);
decision_hashmap(1, [3,7,13,18,23,27,32,37,  42,46,50,  54,58,  63,67,  72,76,  79,  83]) = 1; % 第i个元素置一表示第i步为小球错误运动方向  
step_up_right = 8 + 2 * 2; % 由up转向right的第x步step_right_down = step_up_right + 8 + 2 * 3;step_down_left = step_right_down + 8 + 2 * 3;step_left_up = step_down_left + 6 + 2 * 3;step_up_right_2 = step_left_up + 6 + 2 * 2;step_right_down_2 = step_up_right_2 + 4 + 2 * 2;step_down_left_2 = step_right_down_2 + 4 + 2 * 2;step_left_up_2 = step_down_left_2 + 2 + 2 * 1; step_up_end = step_left_up_2 + 2 + 2 * 1;

在for循环里实现小球的转向和正误判断,下面只张贴正确情况的转向逻辑代码,完整代码可移步gitee仓库Psychtoolbox绘制小球走迷宫下载。

for step = 1 : step_up_end% 通过中间变量,记录上一步小球的位置if(step == 1)previous_y_index_up = xy_4_trace_start(2);previous_y_index_down = xy_4_trace_start(4);previous_x_index_left = xy_4_trace_start(1);previous_x_index_right = xy_4_trace_start(3);elseprevious_y_index_up = current_y_index_up;previous_y_index_down = current_y_index_down;previous_x_index_left = current_x_index_left;previous_x_index_right = current_x_index_right;end% 小球动态路径if ~decision_hashmap(step) % 正确if step <= step_up_right current_y_index_up    = previous_y_index_up - length_chessboard;current_y_index_down  = previous_y_index_down - length_chessboard;current_x_index_left  = previous_x_index_left;current_x_index_right = previous_x_index_right;Screen('FillOval', w, color_ball, [current_x_index_left current_y_index_up ...current_x_index_right current_y_index_down]);elseif step <= step_right_down current_y_index_up    = previous_y_index_up   ;current_y_index_down  = previous_y_index_down ;current_x_index_left  = previous_x_index_left  + length_chessboard;current_x_index_right = previous_x_index_right + length_chessboard;Screen('FillOval', w, color_ball, [current_x_index_left current_y_index_up ...current_x_index_right current_y_index_down]);...
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/689882.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

im(即时通讯)是什么?

在当今数字化时代&#xff0c;即时通讯&#xff08;IM&#xff09;已经成为企业内部沟通与协作中不可或缺的工具。作为一种实时的即时通讯方式&#xff0c;IM能够极大提高团队成员之间的沟通效率&#xff0c;帮助企业快速响应变化&#xff0c;并增强内部协作与创新能力。 Work…

【Java】/*逻辑控制语句和输入输出—快速总结*/

目录 前言 一、分支语句 1.1 if 语句 1.2 switch 语句 二、循环语句 2.1 while 循环 2.1.1 break 2.1.2 continue 2.2 for 循环 2.3 do_while 循环 三、逻辑语句的小结 四、Java 中的输入输出 4.1 输出到控制台 4.2 从键盘输入 前言 Java 中的逻辑控制语句和C语…

如何通过AI技术实现员工培训的革命性变革

AI个性化培训&#xff1a;开启员工潜力的新篇章 在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的影响力已经渗透到社会的各个层面&#xff0c;包括教育与培训行业。AI技术正在彻底改变我们获取知识与技能的方式&#xff0c;特别是在员工培训领域…

win11安装各银行的网银助手都无法打开,双击没反应?

大神贴 右键网银助手属性&#xff0c;在目标后面敲一下空格&#xff0c;输入**-runapp**&#xff0c;应用即可。 如图示例&#xff1a;

vscode go语言开发中在任意包运行和调试代码 Example使用方法

一般情况下我们在进行go语言开发的时候我们都需要创建一个main方法和main包才能运行go代码&#xff0c; 针对这个问题&#xff0c;go语言给我们内置了功能强大的testing测试框架&#xff0c; 其中一个很有意思的Example测试就非常的方便使用。 他不管你在什么包&#xff0c;也…

分布式版本控制工具 - Git

文章目录 1. 概念介绍2. 客户端2.1 介绍2.2 仓库操作2.3 文件操作2.4 分支原理与操作2.5 标签2.6 远程仓库2.7 README与IGNORE 3. IDEA集成4. 版本号4.1 介绍4.2 文件操作4.2 分支操作 5. 命令5.1 介绍5.2 仓库操作5.3 文件操作5.4 分支操作5.5 标签操作5.6 远程仓库 1. 概念介…

27.哀家要长脑子了!---栈与队列

1.739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 用单调栈的方法做&#xff1a; 从左到右遍历数组&#xff1a; 栈中存放的是下标&#xff0c;每个温度在原数组中的下标&#xff0c;从大到小排列&#xff0c;因为这样才能确保的是最近一天的升高温度 如果栈为空&am…

电脑C盘不知不觉满了?学会这6种解决方法!

为何C盘莫名其妙满了&#xff1f;不用怕&#xff0c;本文将告诉您6个解决方法&#xff0c;帮您轻松解决Windows11/10/8/7中 C盘空间不足的问题&#xff01; C盘爆满的后果是什么&#xff1f; 许多Windows用户都可能会碰到这样的问题&#xff1a;“为何我的Win10 C盘莫名其妙满…

达索电磁仿真软件CST查看方式和消除2D/3D图的反射效果【官方教程】

消除2D/3D图的反射效果 查看和分析2D/3D结果时消除不必要的反射效果 View > Options > View Options > Specials 正面看CST软件的3D场分布图时&#xff0c;如下图所示&#xff0c;因为反射效果导致无法看清楚。本章节介绍一下相应的解决方法。 因为View Options的S…

车牌号OCR识别接口如何对接

车牌号OCR识别接口也叫车牌号码文字识别OCR接口&#xff0c;指的是传入车牌照片&#xff0c;精准识别静态车牌图像上的文字信息。那么车牌号OCR识别接口如何对接呢&#xff1f; 首先我们找到一家有做车牌文字识别接口的服务商&#xff0c;数脉API&#xff0c;然后注册账户&…

一文读懂 RAG:它将如何重新定义 AI 的未来?

RAG 可以使 LLM 能够在实时请求提供事实信息时&#xff0c;访问外部来源的数据&#xff0c;比如经过审核的数据库或互联网上的信息。这样一来&#xff0c;RAG 就消除了大家对于 LLM 仅依赖其训练数据中获得的内部知识库的顾虑&#xff0c;毕竟&#xff0c;这些知识库可能存在缺…

2203-简单点-ultralytics库解析-data模块

data模块 overview布局\_\_init__.pyfrom .base import BaseDataset\_\_all__ annotator.pyaugment.pyclass BaseTransformclass Composeclass BaseMixTransformclass 未完继续 overview布局 从上往下解析 __init__.py from .base import BaseDataset __init__.py 文件在 Pyt…