人机交互实验报告

时间:2024.3.31

人机交互实验-----骰子来袭

一.系统使用说明:

本次实验是在win7系统下的android的平台进行的。Eclipse系统没有自带的UML图生成插件,所以将ModleGoon插件下载到eclipse文件夹下的dropins文件夹中,重新启动eclipse后,可以在file—>new—>other打开的窗体看到ModleGoonDigrams的显示,其中包含三种类型的文件:Class Digrams,Interaction Digrams,以及Packge Dependencies Digrams。由于生成图是只需要显示类之间的关系即可,所以用Class Digrams即可。

关于eclipse系统的简介:

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

关于Android系统的简介:

Android是Google于20##年11月05日宣布的基于Linux平台的开源移动操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层的架构,主要分为三部分。底层以Linux内核工作为基础, 由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。

二.    实验要求:

根据已有的安卓框架和程序包,运行程序,经过漫长等待可以看到安卓系统的开机界面,运行其中的Cube_OpenGl图标的应用程序,可以看到一个很可爱的骰子,在鼠标的控制下可以实现旋转。而本次实验的任务就是让这个骰子还可以实现移动和放缩的功能,虽然功能简单,但是对于不熟悉android系统的我们是一个不轻松的任务。

三.    实验整体架构:

在这个骰子游戏的构造中,共定义了两个包:

1.    src文件夹下的com.macrocheng.cubeopengl:

(1)           GLTutorialBase类;

(2)           GLTutorialCube类;

(3)           MainActivity类;

(4)           ViewAnimator类;

2.    gen文件夹下的com.macrocheng.cubeopengl:

(1)           BuildConfig类;

(2)           R类;

这两个包及类中的关系可以用UML类图表示如下:

GLTutorialBase类:

该类作为GLTutorialCube的父类,继承了SurfaceView类,并实现了SurfaceHolder.Callback和Runnable接口,根据资料可知其中接口SurfaceHolder.Callback被用来接收摄像头预览界面变化的信息,而Runnable接口用来实现多线程。而类中的方法可以在类图中看到,而每个类的方法的作用,在源程序中均有备注,此处不再赘述。

GLTutorialCube类:

该类继承了GLTutorialBase类,本次实验的关键代码就在于此。类中设置了环境光和漫反射光的数组作为照明模型,分别用matAmbient和matDiffuse两个数组表示。用一个二维数组box来构建在空间坐标系的正方体骰子,骰子有6个面,用6个二维数组元素表示,每个面用面的4个顶点表示,顶点则是用x,y,z三个坐标表示。但在手机屏幕上只有x,y两个坐标系,所以用二维数组texCoodrs来记录六个面在屏幕上的分布情况,同样6个面,每个面用4个点表示,每个点用x,y表示。用位图数组来记录六个面的图片。而后初始化游戏界面。

下面重点介绍关于旋转,平移,缩放的代码部分:

首先用一下代码来重定位坐标系:

旋转:

使用opengl的方法glRatatef()来控制x,y方向上的旋转:

其中xrot和yrot是在x,y上的旋转角,之所以取负,是因为这样才可以保持旋转方向和手势方向一致。Xrot和yrot由以下代码计算:

平移:

使用glopengl的glTranslated( )方法实现平移:

其中distance表示在x,y方向上的偏移量,distance的计算如下:

_x,_y是在之前手指触摸到屏幕时就记录下的坐标点,当手指移动一定距离后使用event.getX( )和event.getY( )来获得当前手指所在位置坐标,然后取二者之差,即可得到偏移量。

放缩:

使用glopengl的glScalef( )方法实现放缩:

其中num表示在x,y方向上的放缩倍数,num的计算如下:

其中oldDist表示在手指移动前,两手指间的距离;而newDist表示在手指移动后两手指间的距离,所以两距离的比值可以用作放缩倍数。

至于屏幕上有几个手指触摸屏幕可以用变量mode来计数和判断:

MainActivity类:

继承自Activity类,并重写了Activity中的方法onCreate(),启动服务时将会调用onCreate()方法,创建了GLTutorialCube类对象,来开启主要活动。

ViewAnimator类:

继承自Handler类,可以使用其invalidate()来实现view的重绘,关于animation的介绍如下:

 

使用start()和stop()来现实对animation的启动与关闭。

Handler是Message的主要处理者,负责将Message添加到消息队列以及对消息队列中的Message进行处理。

BuildConfig类:

新增了一个特性,允许开发者只在Debug模式下运行部分代码。Builds会生成一个叫做BuildConfig的类,该类包含一个名为DEBUG的常量,其常量值会依据开发者的Build类型自动设定。如此,便可以利用BuildConfig.DEBUG来实现只在Debug模式下运行的代码。

R类:

定义了游戏中要用到的骰子的六个图标和游戏图标以及布局管理器和串设置:

下面简单展示运行界面:

五.实验小结:

本次实验虽然并不困难,但诚如前面所言,因为对android系统缺乏了解,所以很多知识都需要从头整理,并在网上查阅了大量资料,在此感谢网上热心的网友提供的帮助。开始对各类间的关系很不清楚,后来参考了去年的面向对象的课程设计,忽然想到可以使用UML建模,这样就可以直观的得到几个类间的关系。在网上参考了一个网友的建议,原本在src下又建了一个包zoom,其中有一个zoomListener,这样可以给GLTutorialCube的点击事件添加监听器,但是程序没办法运行。后来与同学讨论,关键在于重写onTouchEvent( ),但是既然在重写放缩时有用mode==2判断两指事件,那么也可以用mode==1来判断一指触摸时的旋转,所以不必重写,直接添加就好。但在传参时不小心沿用了网友给出的模板onTouchEvent(View view,MotionEvent  event)导致没有结果。后来将view参数删去,得到了最终想要的结果。

实验中的参考网址:

http://www.android-study.net/listxx.aspx?id=591

http://www.cnblogs.com/monodin/archive/2013/06/19/3144204.html

http://www.cnblogs.com/qingblog/archive/2012/06/27/2566021.html

http://www.cnblogs.com/qingblog/archive/2012/06/27/2566021.html

http://wenku.baidu.com/view/a4f5748fcc22bcd126ff0c1a.html

http://wenku.baidu.com/view/1bbeae73f46527d3240ce05c.html

http://blog.csdn.net/shaojie519/article/details/6725570

http://www.cnblogs.com/devinzhang/archive/2012/08/31/2665705.html

http://www.eoeandroid.com/thread-71484-1-1.html


第二篇:人机交互实验报告2


   计算机科学与技术  

         

                   

                   

                           

                   

                   

                   

教务处制

OO        

注:可根据实际情况加页

更多相关推荐:
人机交互实验报告

数字媒体学院上机实验报告I12八附录LRESULTCALLBACKWndProcHWNDhwndUINTmessageWPARAMwParamLPARAMlParamHDChdcPAINTSTRUCTpsREC...

用户界面设计-人机交互实验报告

人机交互实验报告题目专业班级20xx学号20xx221104220xx6姓名孙元喜实验一图形用户界面的设计一实验目的和要求1熟悉图形用户界面的设计原则2利用一种设计工具完成图形化的用户界面设计二预备知识图形用户...

人机交互实验报告1-人机界面

课程实验报告专业年级软件工程课程名称人机交互指导教师李建廷学生姓名朱怀良学号实验日期20xx年12月17日实验地点实验楼403实验成绩教务处制二OO3年12月17日注可根据实际情况加页

人机交互实验报告1

人机交互实验报告题目专业班级学号姓名实验一图形用户界面的设计一实验目的和要求1熟悉图形用户界面的设计原则2利用一种设计工具完成图形化的用户界面设计二预备知识图形用户界面又称为WIMP界面由窗口windows图标...

人机交互实验报告

实验一实验名称最新人机交互技术实验目的了解最新人机交互的研究内容实验内容通过网络查询最新人机交互相关知识1在百度中找到最新人机交互视频的相关网页查看视频2什么是eTable3人机交互技术在各个领域的应用实验二实...

人机交互实验1报告

实验报告学年第学期课程名称实验名称实验时间指导单位指导教师学生姓名学院系年月日班级学号专业1实验报告2345678

人机交互实验报告1-人机界面

课程实验报告专业年级计算机科学与技术课程名称人机交互指导教师学生姓名学号实验日期实验地点实验成绩教务处制二OO年月日注可根据实际情况加页

人机交互实验报告

实验一实验名称最新人机交互技术实验目的了解最新人机交互的研究内容实验内容通过网络查询最新人机交互相关知识人机交互人机互动英文HumanComputerInteraction或HumanMachineIntera...

人机交互实验报告-耿维

ltpagelanguagequotjavaquotimportquotjavautilquotpageEncodingquotutf8quotgtltStringpathrequestgetContextPa...

人机交互实验报告1-人机界面概述

人机交互技术课程实验报告专业年级学生姓名学号实验成绩

实验报告(人机交互)

中北大学软件学院实验报告专业软件工程方向软件开发与测试课程名称人机交互基础教程班级10210A05学号1021011818姓名姚泽宇辅导教师薛海丽20xx年5月制成绩成绩成绩成绩成绩成绩成绩成绩

工业机器人实验报告(西南科技大学)

西南科技大学学生实验报告实验课程名称数字化设计与制造开课实验室智能机器人与虚拟模机实验室学院制造学院专业过控班级学生姓名学号开课时间20xx至20xx学年第2学期制造科学与工程学院制数字化设计与制造实验报告

人机交互实验报告(33篇)