心理应用工具包 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.mzph.cn/web/10689.shtml

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

相关文章

在Linux上安装并启动Redis

目录 安装gcc环境 上传redis文件方法一&#xff1a;sftp 上传redis文件方法二&#xff1a;wget 启动redis-server ctrlc关闭redis-server 参考文章&#xff1a;Linux 安装 Redis 及踩坑 - 敲代码的阿磊 - 博客园 (cnblogs.com) 准备&#xff1a;打开VMware Workstation&am…

pair对组创建

创建方式1: pair<type,type> p(value1,value2); pair<string, int> p("Tom", 20); cout << "name:" << p.first << "age:" << p.second << endl; 创建方式2: pair<type,type> pmake_pair(v…

商务分析方法与工具(九):Python的趣味快捷-Pandas处理公司财务数据集思路

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

LangChain:大模型框架的深度解析与应用探索

在数字化的时代浪潮中&#xff0c;人工智能技术正以前所未有的速度蓬勃发展&#xff0c;而大模型作为其中的翘楚&#xff0c;以生成式对话技术逐渐成为推动行业乃至整个社会进步的核心力量。再往近一点来说&#xff0c;在公司&#xff0c;不少产品都戴上了人工智能的帽子&#…

初识C语言——第十八天

循环while/do while while 语法结构 while(表达式) 循环语句; break:在while循环中&#xff0c;break用于永久的终止循环 continue:在while循环中&#xff0c;continue的作用是跳过本次循环continue后面的代码 直接去判断部分&#xff0c;看是否进行下一次循环。 注意事项…

即插即用篇 | YOLOv8引入轴向注意力 Axial Attention | 多维变换器中的轴向注意力

本改进已集成到 YOLOv8-Magic 框架。 我们提出了Axial Transformers,这是一个基于自注意力的自回归模型,用于图像和其他组织为高维张量的数据。现有的自回归模型要么因高维数据的计算资源需求过大而受到限制,要么为了减少资源需求而在分布表达性或实现的便捷性上做出妥协。相…

解决wangEditor使用keep-alive缓存后,调用editor.cmd.do()失败

前提&#xff1a;wangeditor版本&#xff1a;4.7.11 vue版本&#xff1a;vue2 问题&#xff1a;在使用wangeditor富文本编辑器时&#xff0c;需求需要通过点击一个按钮&#xff0c;手动插入定义好的内容&#xff0c;所以使用了 editor.cmd.do(insertHTML, ....) 方法新增…

03.Linux文件操作

1.操作系统与Linux io框架 1.1 io与操作系统 1.1.1 io概念 io 描述的是硬件设备之间的数据交互&#xff0c;分为输⼊ (input) 与输出 (output)。 输⼊&#xff1a;应⽤程序从其他设备获取数据 (read) 暂存到内存设备中&#xff1b;输出&#xff1a;应⽤程序将内存暂存的数据…

FANUC机器人基本保养概述

对于工业机器人来说&#xff0c;定期保养机器人可以延长机器人的使用寿命。对于FANUC机器人来说&#xff0c;FANUC机器人的常规保养周期可以分为日常、三个月、六个月、一年、两年、三年。以下是FANUC机器人的基本保养周期概览&#xff1a; 在实际生产应用中&#xff0c;可以参…

具身智能论文

目录 1. PoSE: Suppressing Perceptual Noise in Embodied Agents for Enhanced Semantic Navigation2. Embodied Intelligence: Bionic Robot Controller Integrating Environment Perception, Autonomous Planning, and Motion Control3. Can an Embodied Agent Find Your “…

7.STL_string(详细)

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版…

maven远程仓库访问顺序

首先需要了解一下各个配置文件&#xff0c;主要分为三类&#xff1a; 全局配置文件(${maven.home}/conf/settings.xml)&#xff0c;maven安装路径下的/conf/settings.xml用户配置文件(%USER_HOME%/.m2/settings.xml)&#xff0c;windows用户文件夹下项目配置文件&#xff1a;p…

C/C++ 入门(10)list类(STL)

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 欢迎来指教&#xff01; 目录 一、标准库中的list 1、了解 2、常用接口说明 a.常见的构造函数 b.迭代器 c. Capacity​编辑 d.Element access e.Modifiers 二、实现 1、框架 a.节点 b.迭代器 …

简单易懂的Java Queue入门教程!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

如何建设智慧党校

随着信息技术的飞速展开&#xff0c;特别是近年移动互联网技术&#xff0c;物联网技术&#xff0c;人工智能技术&#xff0c;大数据数据的深入展开&#xff0c;我国快速的进入信息化社会&#xff0c;信息化对各行各业的改造越来越深入&#xff0c;任何职业&#xff0c;任何安排…

SSM【Spring SpringMVC Mybatis】—— Spring(一)

目录 1、初识Spring 1.1 Spring简介 1.2 搭建Spring框架步骤 1.3 Spring特性 1.5 bean标签详解 2、SpringIOC底层实现 2.1 BeanFactory与ApplicationContexet 2.2 图解IOC类的结构 3、Spring依赖注入数值问题【重点】 3.1 字面量数值 3.2 CDATA区 3.3 外部已声明be…

VUE使用饿了么的上传组件时实现图片预览

创作灵感 最近在写项目时&#xff0c;遇到了上传头像的需求&#xff0c;我使用的是element组件中的upload组件。但是在使用时&#xff0c;我需要实现预览、手动上传头像等功能。然而在使用饿了么组件时&#xff0c;这些功能还是需要我们自己去手动实现的&#xff0c;在手动实现…

Linux makefile进度条

语法 在依赖方法前面加上就不会显示这一行的命令 注意 1.make 会在当前目录下找名为“makefile” 或者 “Makefile” 的文件 2.为了生成第一依赖文件&#xff0c;如果依赖文件列表有文件不存在&#xff0c;则会到下面的依赖关系中查找 3..PHONY修饰的依赖文件总是被执行的 …

操作系统原理与系统——实验十三多道批处理作业调度(作业可移动)

关键代码 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct data{int hour;//当前小时int min;//当前分钟 }time; struct node{char name[20];//进程名time arrive;//到达就绪队列时间int zx;//执行时间(预期时间)int size;int ta…

Polygon市值机器人

随着区块链技术的蓬勃发展和数字货币市场的日益繁荣&#xff0c;投资者们对于如何精准把握市场动态、实现资产稳健增长的需求愈发迫切。在这个背景下&#xff08;市值管理飞//机//aishutuyu&#xff09;&#xff0c;Polygon市值机器人应运而生&#xff0c;作为一款基于Polygon公…