实验二 图形数据的存储

合集下载

MapGIS的基本功能及图形数据的输入与编辑

MapGIS的基本功能及图形数据的输入与编辑

实验一、MapGIS的组成及基本功能一、MAPGIS 的主要功能1.数据输入在建立数据库时,我们需要将各种类型的空间数据转换为数字数据,数据输入是GIS的关键之一。

MAPGIS 提供的数据输入有数字化仪输入、扫描矢量化输入、GPS 输入和其它数据源的直接转换。

2.数据处理输入计算机后的数据及分析、统计等生成的数据在入库、输出的过程中常常要进行数据校正、编辑、图形整饰、误差消除、坐标变换等工作。

MAPGIS 通过图形编辑子系统及投影变换、误差校正等系统来完成,下面分别介绍之。

(1) 图形编辑该系统用来编辑修改矢量结构的点、线、区域的空间位置及其图形属性、增加或删除点、线、区域边界,并适时自动校正拓扑关系。

图形编辑子系统是对图形数据库中的图形进行编辑、修改、检索、造区等,从而使输入的图形更准确、更丰富、更漂亮。

(2) 投影变换地图投影的基本问题是如何将地球表面(椭球面或圆球面)表示在地图平面上。

这种表示方法有多种,而不同的投影方法实现不同图件的需要,因此在进行图形数据处理中很可能要从一个地图投影坐标系统转换到另一个投影坐标系统,该系统就是为实现这一功能服务的,本系统共提供了20 种不同投影间的相互转换及经纬网生成功能。

通过图框生成功能可自动生成不同比例尺的标准图框。

(3) 误差校正在图件数字化输入过程中,通常的输入法有:扫描矢量化、数字化仪跟踪数字化、标准数据输入法等。

通常由于图纸变形等因素,使输入后的图形与实际图形在位置上出现偏差,个别图元经编辑、修改后可满足精度要求,但有些图元由于发生偏移,经编辑很难达到实际要求的精度,说明图形经扫描输入或数字化输入后,存在着变形或畸变。

出现变形的图形,必须经过数据校正,消除输入图形的变形,才能使之满足实际要求,该系统就是为这一目的服务的。

通过该系统即可实现图形的校正,达到实际需求。

(4) 镶嵌配准图象镶嵌配准系统是一个32 位专业图象处理软件,本系统以MSI 图象为处理对象。

小学信息技术教案第四课保存“画图”作品

小学信息技术教案第四课保存“画图”作品

小学信息技术教案第四课保存“画图”作品小学信息技术教案第四课:保存“画图”作品简介:本教案针对小学生开展信息技术教学,主题为“保存‘画图’作品”。

通过本节课的学习,学生将学会使用计算机软件进行基本的绘图,并学会保存自己的作品,以便随时查看和编辑。

教学目标:1. 学习如何使用计算机软件进行简单绘图。

2. 了解保存、查看和编辑绘图作品的方法。

3. 培养学生的信息技术应用能力和创造力。

教学准备:计算机、绘图软件、准备好的绘图示例、保存示例。

教学过程:引入1. 引入与主题相关的问题:你喜欢绘图吗?你有没有使用电脑来绘图?你知道怎样保存自己的绘图作品吗?这些问题旨在激发学生对本节课内容的兴趣。

讲解2. 通过演示绘图软件的基本功能和操作方法,向学生介绍绘图软件的界面、工具栏和菜单选项。

操作练习3. 让学生跟随教师的指导,进行绘图软件的操作练习。

首先,教师演示如何绘制一个简单的图形,例如绘制一个房子的图像。

然后,要求学生跟随教师的步骤,在计算机上绘制同样的图形。

保存作品4. 在学生完成绘图后,引导学生学习如何保存他们的作品。

教师可以演示保存作品的过程,并解释保存的目的是为了能够随时查看和编辑。

强调保存作品的重要性,并提醒学生选择一个容易记住的文件名。

查看和编辑作品5. 学会保存作品后,教师讲解如何打开已保存的绘图文件。

学生将学会找到存储位置,并掌握查看和编辑已保存作品的方法。

巩固练习6. 让学生根据自己的想法绘制一个自由创作的图形,并保存其作品。

学生可以设计自己喜欢的图案、颜色和形状。

扩展应用7. 鼓励学生将所学的绘图技巧应用于其他学科中。

例如,学生可以使用绘图软件在学习地理时绘制地图,或在学习科学时绘制实验设备。

总结:通过本节课的学习,学生学会了如何使用计算机软件进行基本的绘图,并学会了保存、查看和编辑自己的绘图作品。

这不仅增强了学生在信息技术方面的能力,还培养了学生的创造力和思维能力。

绘图作为一种视觉表达方式,也能够在其他学科中起到促进学习的作用。

用matlab数字图像处理四个实验

用matlab数字图像处理四个实验

数字图像处理实验指导书目录实验一MATLAB数字图像处理初步实验二图像的代数运算实验三图像增强-空间滤波实验四图像分割3实验一 MATLAB数字图像处理初步一、实验目的与要求1.熟悉及掌握在MATLAB中能够处理哪些格式图像。

2.熟练掌握在MATLAB中如何读取图像。

3.掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。

4.掌握如何在MATLAB中按照指定要求存储一幅图像的方法。

5.图像间如何转化。

二、实验原理及知识点1、数字图像的表示和类别一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。

灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。

例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。

因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。

图像关于x和y坐标以及振幅连续。

要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。

将坐标值数字化成为取样;将振幅数字化成为量化。

采样和量化的过程如图1所示。

因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。

作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。

图1 图像的采样和量化根据图像数据矩阵解释方法的不同,MA TLAB把其处理为4类:➢亮度图像(Intensity images)➢二值图像(Binary images)➢索引图像(Indexed images)➢RGB图像(RGB images)(1) 亮度图像一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。

若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。

若图像是double类,则像素取值就是浮点数。

图形用户界面 实验报告二

图形用户界面      实验报告二

图形用户接口081180015 戴稚晖通信工程一、实验目的1、了解嵌入式系统图形用户界面的基本编程方法。

2、探讨软件结构的层次关系,学习图形库的制作。

一、实验原理概述1、图形用户界面简介图形用户界面(GUI)是一种图形化为基础的用户界面,使用统一的图形操作方式,如可移动的视图,选项及鼠标,作为用户与操作系统之间的桥梁,从而使用户摆脱了在命令行提示符下与操作系统进行交互的方式。

在嵌入式系统设计中,常被选择作为GUI系统进行开发的有:MiniGUI、MicroWindows、OpenGUI和QT/Embedded。

这些GUI系统都是以Frame Buffer作为图形驱动。

Frame Buffer作为Linux内核提供的一种底层图形接口,将显示设备映射到进程地址空间,是大多数GUI的基础。

2、Frame Buffer简介Frame Buffer又称之为帧缓冲或显存,是系统内的一段存储空间,与显示屏的整个显示区域相对应,通过改变帧缓冲区的内容来改变显示信息。

Frame Buffer的空间大小由显示屏的大小和显示模式决定。

显示屏可以以单色或者彩色显示,单色用一位来表示颜色,彩色可以用2、4、8、16、24、32等位色。

显示屏有单屏和双屏显示模式。

其中双屏显示模式将整个屏幕分为两部分,每个部分有各自的Frame Buffer,它们的地址无需连续,并有独立的两个通道将Frame Buffer中的数据传输到显示屏。

3、Frame Buffer与图像色彩Frame Buffer支持多种颜色显示方式:单色,伪彩色,真彩色,直接色,灰度。

伪彩色的RGB值不能直接从Frame Buffer中得到,而是通过调色板间接得到,此时Frame Buffer中存放的是调色板的索引值,通过索引值获得颜色。

真彩色的RGB值直接从Frame Buffer中得到,且不需要经过调色板。

直接彩色Frame Buffer里存放的是RGB值,但需要经过调色板调色后传输到显示屏。

最新实验二 数据采集与处理

最新实验二  数据采集与处理

实验二数据采集与处理实验二数据采集与处理一、实验内容(1)数字化操作(2)投影与坐标系设置二、实验目的(1)通过实践,掌握采集数据的主要过程。

(2)通过操作,掌握ArcView的Shape文件格式如何通过其自身的实用工具创建,以及投影、坐标等设置。

三、实验指导(一)构建数据库实验内容:利用ArcView构建GIS数据库。

实验目的:通过实验,进一步了解GIS与一般数据库和图形软件的区别和联系。

实验数据:①使用现有的数据(包括电子数据和非电子数据),②创建新的数据(可以由卫星影像、GPS数据或纸质地图创建新的GIS数据)实验过程:构建数据库的步骤如下。

(1)ArcView GIS建库①打开ArcView GIS软件,选择“View(视图)│New Theme(新专题)”命令,弹出“New Themw(新专题)”对话框,对专题特征“点、线和面”进行选择。

如在图2.1中,选择“point (点)”为特征创建专题,单击OK(确认)按钮。

保存“Shape格式”的文件名(File Name)后,就可利用工具栏中的“Draw Point(画点)”作图(如图2.2所示),在图2.2中的点与属性表信息通过ID关联。

若需要记录更多有关“点”的属性信息,可通过添加表格字段完成。

②选择菜单中“Edit(编辑)│Add Filed (加字段)”命令,进入“Field Definition(字段定义)”对话框(如图2.3所示),字段定义通常包括数据宽度、类型、小数位数。

宽度指为每一字段预留的位数,应满足数据中最大的或最长的字符串,符号与小数点所占位数也应包括在内。

数据类型必须是GIS软件包所允许的类型,可以是数值型或字符型。

小数的位数是实数数据类型定义的一部分。

图2.1 选择特征创建专题图2.2 点与属性表关联示意图2.3 Field Definition(字段定义)对话框提示1:属性数据输入主要有键盘输入或从其他数据库系统导入属性数据(多数GIS软件包可以从数据库服务器,如Oracle/Access/Sybase/Informix导入dBASE和ASCⅡ文件)。

计算机图形学实验报告_2

计算机图形学实验报告_2

计算机图形学实验报告学号:********姓名:班级:计算机 2班指导老师:***2010.6.19实验一、Windows 图形程序设计基础1、实验目的1)学习理解Win32 应用程序设计的基本知识(SDK 编程);2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。

4)学习MFC 类库的概念与结构;5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框);6)学习使用MFC 的图形编程。

2、实验内容1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。

(可选任务)2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,Thisis my first SDI Application"。

(必选任务)3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。

定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。

3、实验过程1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档;2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,Thisis my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制;3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。

4、实验结果正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。

人教版二年级下册数学《10 第3课时 图形的运动、数据收集整理 》教案

人教版二年级下册数学《10 第3课时 图形的运动、数据收集整理 》教案

人教版二年级下册数学《10 第3课时图形的运动、数据收集
整理》教案
一、教学内容
1. 学习目标
•理解图形的运动
•学习数据的收集整理方法
2. 教学重点
•理解图形的运动规律
•数据的整理方法
3. 教学难点
•能够运用所学知识整理数据
二、教学准备
1.教学工具:黑板、彩色粉笔、教学PPT等
2.教学材料:教科书、练习册等
3.学生用具:铅笔、橡皮、尺子等
三、教学过程
1. 热身
•让学生观察黑板上准备好的几何图形,讨论这些图形有哪些不同之处。

2. 导入
•引导学生思考图形的运动是什么意思,以及在日常生活中我们经常看到的图形运动有哪些例子。

3. 讲解
•通过PPT或黑板,向学生介绍图形的运动规律,并带领学生观察和分析图形的运动过程。

4. 操练
•让学生尝试自己设计一个简单的图形并让其运动,然后观察并描述图形的运动规律。

5. 数据收集整理
•引导学生讨论数据的概念,介绍数据的收集整理方法,并进行相关练习。

6. 练习
•布置相关练习题,让学生在课后进行巩固和练习。

四、课堂小结
通过本节课的学习,学生能够理解图形的运动规律,掌握数据的收集整理方法,并能够运用所学知识进行相关练习。

五、作业布置
1.完成课堂练习题
2.收集家里的一些数据,并整理成表格
以上就是本节课的教案内容,希望同学们能够在课后进行复习和巩固,更好地
掌握所学知识。

数据结构_迷宫求解_实验报告 北邮

数据结构_迷宫求解_实验报告 北邮

数据结构实验报告实验名称:实验二——利用栈结构实现迷宫求解问题学生姓名:班级:班内序号:学号:日期:2012年11月19日一、实验目的1、进一步掌握指针、模板类、异常处理的使用2、掌握栈的操作的实现方法3、掌握队列的操作的实现方法4、学习使用栈解决实际问题的能力5、学习使用队列解决实际问题的能力二、实验要求:利用栈结构实现迷宫求解问题。

迷宫求解问题如下:心理学家把一只老鼠从一个无顶盖的大盒子的入口赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口,测试算法的迷宫如下图所示。

提示:1、可以使用递归或非递归两种方法实现2、老鼠能够记住已经走过的路,不会反复走重复的路径3、可以自己任意设置迷宫的大小和障碍4、使用“穷举求解”的方法三、程序分析1、存储结构栈存储结构;示意图;2、关键算法分析A、绘制迷宫;伪代码:1、输出迷宫的大小及全部设置为障碍;2、根据键盘的输入绘制迷宫的路线,起始点和终点;void draw()//绘制迷宫障碍{k=getch();switch(int(k)){case 105://上if(by>5){by--;j--;}break;case 107://下if(by<M+4){by++;j++;}break;case 106://左if(bx>2){bx=bx-2;i--;}break;case 108://右if(bx<2*N){bx=bx+2;i++;}break;case 114://'R'路map[i][j]=0;cout<<".";break;case 119://'W'墙map[i][j]=-3;cout<<"■";break;case 115://'S'起点s[0].x=i;//起点入栈s[0].y=j;top=1;map[i][j]=-1;cout<<k;break;case 101://'E'终点map[i][j]=-2;cout<<k;break;}gotoxy(bx,by);}B、路径寻找伪代码;1、向某一方向查找是否有路;2、如有遍历一下栈,看是否已经进栈,一进栈就舍弃,寻求下一个;无就让其进栈。

计算机图形学实验报告2

计算机图形学实验报告2

计算机图形学实验报告2计算机图形学实验报告实验⼆、三维⽹格模型光顺⼀、实验⽬的与基本要求:(1)掌握Obj⽂件的读⼊;(2)利⽤给定的数据结构类,建⽴读⼊⽹格模型数据结构;(3)利⽤OpenGL类库,对三维模型进⾏绘制;(4)利⽤OpenGL类库,增加采⽤⿏标交互⽅式对三维模型进⾏旋转、放缩、平移等操作;(5)实现Laplacian⽅法的三维模型光顺操作,并观察三维模型光顺过程;⼆、实验设备(环境)及要求1. 操作系统:Windows XP 或Windows 72. 编程环境:Microsoft Visual Studio 2010,OpenGL 库函数3. 界⾯框架:Win32,MFC,QT选择其中⼀种三、实验内容与步骤实验分为以下⼏个步骤:(1)掌握Obj⽂件的读⼊顶点和⾯的个数;(2)建⽴数组存储点的坐标及⾯上的点数;(3)存储顶点的邻接⾯数,并记录每个顶点周围的邻接点(4)计算每个⾯的法向利⽤OpenGL类库,增加采⽤⿏标交互⽅式对三维模型进⾏旋转、放缩、平移等操作;(5)利⽤⾯法向及顶点坐标进⾏绘制⼏何体(6)实现⿏标对物体旋转、平移、缩放的算法(7)实现Laplacian⽅法的三维模型光顺操作,并观察三维模型光顺过程;四、实现过程说明及成果展⽰:(1)掌握Obj⽂件的读⼊顶点和⾯的个数;由于obj⽂件的存储形式是v x1 x2 x3;…f v1 v2 v3;…这种形式,所以在记录点和⾯的数量时,只需按⾏读取,然后再判断⾸字母是v/f即可实现代码如下:(2)建⽴数组存储点的坐标及⾯上的点数;数组的⼤⼩由点数和⾯数决定,点数组和⾯数组均由0开始记录,故后⾯再⽤⾯对应点的时候,由于⾯上点是从1开始记录,故需要减1然后使⽤,代码如下:(3)存储顶点的邻接⾯数,并记录每个顶点周围的邻接点记录点邻接⾯的是新建⼀个数组,在读⾯的时候,将该⾯的序号存⼊对应点的数组中,然后再在每个⾯上取⼀点,记录到点的邻接点数组中,在每个⾯上取得的点为向外右⼿⽅向的下⼀个点,实现代码如下:(4)计算每个⾯的法向计算⾯的法向⽅式为⾯上右⼿⽅向上的两向量的叉乘得到,即所⽤代码为:(8)利⽤⾯法向及顶点坐标进⾏绘制⼏何体⽤法向绘制的⽅式是先⽤glNormal3fv(v)指出⾯的法向;再⽤glVertex3f传⼊⾯上点的坐标;由于我将glNormal3fv(v)中写在算法向所以我直接对此直接调⽤即可,代码如下:(9)实现⿏标对物体旋转、平移、缩放的算法平移:利⽤Transform函数和键盘事件来改变参数,w,s,a,d分别控制绘制的kitty猫的上下左右的移动:实现代码如下:旋转:利⽤gllookat();函数设定了观察⾓度,并⽤⿏标事件改变参数,⽤实现观察视⾓的变化实现物体的旋转,代码如下:缩放:运⽤glScalef⽅法和键盘事件改变参数,实现物体的放⼤和缩⼩,代码如下:(10)实现Laplacian⽅法的三维模型光顺操作,并观察三维模型光顺过程;Laplacian⽅法的原理是利⽤⽬标点与其所有邻接点平均后的点的差向量,对⽬标点的坐标进⾏变换的过程,具体⽅法是:①建⽴每个点的邻接顶点数组,存储每个点的邻接点②对每个顶点的邻接点进⾏求平均,即将邻接点的坐标求和后除以邻接点个数,从⽽得到邻接平均点③得到优化向量优化向量= 邻接平均点-⽬标点④设定优化度参数λ,得到优化后的新坐标新坐标= ⽬标点+ λ*优化向量在程序中,对于第num个顶点,我设定的变量为邻接平均点v0优化向量l新坐标数组vNewArr具体代码如下:五、结果展⽰及说明计算⾯法向后直接绘制(未光顺):光顺进⾏⼀次后光顺多次后利⽤点绘制结果为旋转后缩放后平移后六、⼼得体会(1)计算⾯法向时法向量的⽅向没有运⽤右⼿⽅向,导致有的⾯法向向⾥,从⽽出现雪花(2)在运⽤Laplacian算法进⾏求邻接平均点时未初始化邻接平均点数组,导致平均点的累加从⽽出现越光顺越粗糙的现象(3)在obj⽂件中⾯对应顶点数和顶点数组的标号相差1.在运⽤的时候需减1,⾯从1开始记顶点,顶点数组从0开始记顶点七、实验代码#define GLUT_DISABLE_ATEXIT_HACK#include#include#include#include#include#include#include#includeusing namespace std;int v_num = 0; //记录点的数量int f_num = 0; //记录⾯的数量int vn_num = 0;//记录法向量的数量int vt_num = 0;GLfloat **vArr; //存放点的⼆维数组GLfloat **vNewArr;//存放点的⼆维数组int **fvArr; //存放⾯顶点的⼆维数组GLfloat **fnArr;//存放⾯法向量的⼆维数组int **ftArr;int **vfArr;//存放顶点临接的⾯数的数组int **nextVArr;//存放下⼀个临界顶点的数组GLfloat **vnArr;//存放点法向量的⼆维数组string s1, s2, s3, s4;GLfloat f2, f3, f4;int num1, num2, num3;typedef GLfloat point3[3];point3 x, y,l;//平⾯上的两个向量x,y和拉普拉斯向量lstatic GLfloat theta[] = { 0.0,0.0,0.0 };static GLint axis = 2;static GLdouble viewer[] = { 0.0, 0.0, 5.0 }; /* initial viewer location */ static GLdouble Tran[] = { 0.0,0.0,0.0 }; static GLdouble sca = 1.0;void getLineNum(string addrstr) //获取点和⾯的数量{ifstream infile(addrstr.c_str()); //打开指定⽂件if (!infile) {cout <<"open error!"<< endl;}string sline;//每⼀⾏int i = 0, j = 0;while (getline(infile, sline)) //从指定⽂件逐⾏读取{if (sline[0] == 'v'){v_num++;}if (sline[0] == 'f'){f_num++;}}}int readfile(string addrstr) //将⽂件内容读到数组中去{//getLineNum(addrstr);//new⼆维数组vArr = new GLfloat*[v_num];for (int i = 0; i < v_num; i++) {vArr[i] = new GLfloat[3];}vNewArr = new GLfloat*[v_num];for (int i = 0; i < v_num; i++) {vNewArr[i] = new GLfloat[3]; }vnArr = new GLfloat*[vn_num];for (int i = 0; i < vn_num; i++) {vnArr[i] = new GLfloat[3];}vfArr = new int*[v_num];for (int i = 0; i < v_num; i++) {vfArr[i] = new int[10];for (int j = 0; j < 10; j++) { vfArr[i][j] = -1;}}nextVArr = new int*[v_num];for (int i = 0; i < v_num; i++) {nextVArr[i] = new int[10];for (int j = 0; j < 10; j++) { nextVArr[i][j] = -1; }}fvArr = new int*[f_num];fnArr = new GLfloat*[f_num];ftArr = new int*[f_num];for (int i = 0; i < f_num; i++) {fvArr[i] = new int[3];fnArr[i] = new GLfloat[3];ftArr[i] = new int[10];}ifstream infile(addrstr.c_str()); if (!infile) { cout <<"open error!"<< endl;exit(1);}string sline;//每⼀⾏int ii = 0, jj = 0, kk = 0, mm = 0;while (getline(infile, sline)){if (sline[0] == 'v')//存储点{istringstream sin(sline);sin >> s1 >> f2 >> f3 >> f4;vArr[ii][0] = f2;vArr[ii][1] = f3;vArr[ii][2] = f4;ii++;}if (sline[0] == 'f') //存储⾯{istringstream in(sline);GLfloat a;in >> s1>>num1>>num2>>num3;//去掉f fvArr[kk][0] = num1;fvArr[kk][1] = num2;fvArr[kk][2] = num3;for (int i = 0; i < 10; i++) {if (vfArr[num1-1][i] == -1) {vfArr[num1-1][i] = kk;nextVArr[num1-1][i] = num2;break;}}for (int j = 0; j < 10; j++) {if (vfArr[num2-1][j] == -1) {vfArr[num2-1][j] = kk;nextVArr[num2-1][j] = num3;break;}}for (int i = 0; i < 10; i++) {if (vfArr[num3-1][i] == -1) {vfArr[num3-1][i] = kk;nextVArr[num3-1][i] = num1;break;}}kk++;}}return 0;}//计算⾯法向void nomal(point3p) {/*⽮量的归⼀化*///double sqrt();float d = 0.0;int i;for (i = 0; i < 3; i++)d += p[i] * p[i];d = sqrt(d);if (d > 0.0)for (i = 0; i < 3; i++)p[i] /= d;}void getFaceNormal(point3A, point3B, point3C) { x[0] = C[0] - A[0]; x[1] = C[1] - A[1];x[2] = C[2] - A[2];y[0] = A[0] - B[0];y[1] = A[1] - B[1];y[2] = A[2] - B[2];point3 v;v[0] = x[1] * y[2] - x[2] * y[1];v[1] = x[2] * y[0] - x[0] * y[2];v[2] = x[0] * y[1] - x[1] * y[0];nomal(v);glNormal3fv(v);}void Laplacian() {for (int num = 0; num < v_num; num++) {int m = 0;//求得点的邻接⾯数for (int i = 0; i < 10; i++) {if (nextVArr[num][i] != -1) {m++;}else {break;}}point3 v0;for (int i = 0; i < 3; i++) {v0[i] = 0;}for (int i = 0; i < m; i++) {v0[0] += vArr[nextVArr[num][i] - 1][0];v0[1] += vArr[nextVArr[num][i] - 1][1];v0[2] += vArr[nextVArr[num][i] - 1][2];}if (m != 0) {for (int i = 0; i < 3; i++)v0[i] /= m;}l[0] = v0[0] - vArr[num][0];l[1] = v0[1] - vArr[num][1];l[2] = v0[2] - vArr[num][2];vNewArr[num][0] = vArr[num][0] + l[0] * 0.3;vNewArr[num][1] = vArr[num][1] + l[1] * 0.3;vNewArr[num][2] = vArr[num][2] + l[2] * 0.3;}for (int i = 0; i < v_num; i++) {vArr[i][0] = vNewArr[i][0];vArr[i][1] = vNewArr[i][1];vArr[i][2] = vNewArr[i][2];}}void init(void){getLineNum("H:\\kitten_noisy.obj");readfile("H:\\kitten_noisy.obj");double viewer[] = { 0.0, 0.0, 8.0 }; /* initial viewer location */GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat mat_shininess[] = { 50.0 };//材料的镜⾯指数,其值越⼤越精细GLfloat light_position[] = { 1.0, 1.0f, 1.0, 0.0 };GLfloat white_light[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat lmodel_ambient[] = { 0.1, 0.1, 0.1, 1.0 };glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_SMOOTH);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glLightfv(GL_LIGHT0, GL_POSITION, light_position);//光源位置glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);//漫反射光源glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);//镜⾯反射光源glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);//环境光源// glEnable(glMaterialf);glEnable(GL_LIGHTING);//启动光照glEnable(GL_LIGHT0);//启⽤0度光源glEnable(GL_DEPTH_TEST);//启动深度测试/*glShadeModel(GL_SMOOTH); // Enable Smooth ShadingglClearColor(0.0f, 0.0f, 0.0f, 0.5f); // ⿊⾊背景glClearDepth(1.0f);// 深度缓冲区设置glEnable(GL_DEPTH_TEST); // 允许深度测试glDepthFunc(GL_LEQUAL);// 定义深度测试类型glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculation */}。

计算机实验二实验报告

计算机实验二实验报告

深圳大学实验报告课程名称计算机导论项目名称操作系统与工具软件学院专业指导教师报告人学号实验时间 2012年10月15日提交时间 2012年10月18日教务处制一、实验目的与要求1.掌握Windows或Linux的基本操作;2.掌握文件管理、磁盘管理以及控制面板设置;3.熟悉汉字输入法以及金山打字软件的使用;4.了解Windows注册表管理和常用工具软件的使用;5.学会自己提出问题,并得出解决问题的方法。

二、实验内容与方法1.了解Windows的启动与关闭,桌面的组成,窗口的组成与操作,鼠标及其操作,菜单与对话框,应用程序的切换,任务栏和“开始”菜单。

2.了解“资源管理器”和“我的电脑”,懂得文件和文件夹的操作,会磁盘清理,格式化磁盘,会备份和系统还原以及虚拟内存的设置和控制面板的鼠标设置、系统日期和时间、桌面背景及屏幕保护的设置、会安装与卸载应用程序、多用户环境的设置、文件夹共享的设置、汉字输入法的设置。

3.了解安装汉字输入法,添加或删除汉字输入法,输入法的选择,输入法的快捷键设置以及智能ABC输入法的使用和了解金山打字软件的启动及其窗口,打字教程,英文打字,拼音打字,速度测试,个人管理。

4.了解注册表基本结构,使用注册表,备份与还原注册表信息和会使用压缩软件、Adobe Acrobat、虚拟光驱。

电子图书浏览与制作工具。

三、实验步骤与过程一.1.Windows的启动与关闭⑴Windows的启动连接计算机的电源,打开电源,安装了Windows的计算机就会自动启动,计算机将显示欢迎的界面,之后将看到Windows的桌面。

⑵Windows的关闭单击“开始”按钮打开“开始”菜单,在其中选择“关闭计算机”,在出现的对话框中单击选择“关闭”,系统将关闭。

2.桌面的组成:桌面上摆放了一些经常用到的或特别重要的文件夹和工具图标,使用鼠标双击想使用的应用程序即可打开相应的应用程序。

3.窗口的组成窗口的基本操作有打开与关闭窗口、调整窗口大小、移动窗口等操作步骤。

数字图像处理实验报告.doc

数字图像处理实验报告.doc

数字图像处理实验报告数字图像处理实验报告1一.实验内容:主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像平移,图像的镜像,图像的转置,比例缩放,旋转变换等.具体要求如下:1. 编程实现图像平移,要求平移后的图像大小不变;2. 编程实现图像的镜像;3. 编程实现图像的转置;4. 编程实现图像的比例缩放,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的缩放效果;5. 编程实现以任意角度对图像进行旋转变换,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的旋转效果.二.实验目的和意义:本实验的目的是使学生熟悉并掌握图像处理编程环境,掌握图像平移、镜像、转置和旋转等几何变换的方法,并能通过程序设计实现图像文件的读、写操作,及图像平移、镜像、转置和旋转等几何变换的程序实现.三.实验原理与主要框架3.1实验所用编程环境Visual C++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具.VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Wet应用程序.VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具.VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具.在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用.3.2实验处理的对象:256色的BMP(BIT MAP格式图像BMP(BIT MAP位图的文件结构:具体组成图:BITMAPFILEHEADER位图文件头(只用于BMP文件)bfType="BM" bfSize bfReserved1bfReserved2bfOffBitsbiSize biWidthbiHeight biPla nesbiBitCou ntbiCompressi onbiSizeimagebiXPelsPerMeterbiY PelsPerMeterbiClrUsedbiCirimporta nt单色DIB有2个表项16色DIB有16个表项或更少256色DIB有256个表项或更少真彩色DIB没有调色板每个表项长度为4字节(32位)像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍BITMAPINFOHEAD位图信息头Palette 调色板DIBPixels DIB 图像数据1. BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.2. BMP文件头BMP文件头数据结构含有BMP文件的类型(必须为BMP)文件大小(以字节为单位)、位图文件保留字(必须为0)和位图起始位置(以相对于位图文件头的偏移量表示)等信息.3. 位图信息头BMP位图信息头数据用于说明位图的尺寸(宽度,高度等都是以像素为单位,大小以字节为单位,水平和垂直分辨率以每米像素数为单位),目标设备的级别,每个像素所需的位数,位图压缩类型(必须是0)等信息.4. 颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色.具体包含蓝色、红色、绿色的亮度(值范围为0-255)位图信息头和颜色表组成位图信息5. 位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上.Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充.3.3 BMP(BIT MAP )位图的显示:①一般显示方法:1. 申请内存空间用于存放位图文件2. 位图文件读入所申请内存空间中3. 在函数中用创建显示用位图,用函数创建兼容DC用函数选择显示删除位图但以上方法的缺点是:1)显示速度慢;2)内存占用大;3)位图在缩小显示时图形失真大,(可通过安装字体平滑软件来解决);4)在低颜色位数的设备上(如256显示模式)显示高颜色位数的图形(如真彩色)图形失真严重.②BMP位图缩放显示:用视频函数来显示位图,内存占用少,速度快,而且还可以对图形进行淡化(Dithering )处理.淡化处理是一种图形算法,可以用来在一个支持比图像所用颜色要少的设备上显示彩色图像.BMP位图显示方法如下:1. 打开视频函数,一般放在在构造函数中2. 申请内存空间用于存放位图文件3. 位图文件读入所申请内存空间中4. 在函数中显示位图5. 关闭视频函数,一般放在在析构函数中以上方法的优点是:1)显示速度快;2)内存占用少;3)缩放显示时图形失真小,4)在低颜色位数的设备上显示高颜色位数的图形图形时失真小;5)通过直接处理位图数据,可以制作简单动画3.4程序中用到的访问函数Win dows支持一些重要的DIB访问函数,但是这些函数都还没有被封装到MFC中,这些函数主要有:1. SetDIBitsToDevice 函数:该函数可以直接在显示器或打印机上显示DIB.在显示时不进行缩放处理.2. StretchDIBits 函数:该函数可以缩放显示DIB于显示器和打印机上.3. GetDIBits 函数:还函数利用申请到的内存,由GDI位图来构造DIB.通过该函数,可以对DIB的格式进行控制,可以指定每个像素颜色的位数,而且可以指定是否进行压缩.4. CreateDIBitmap函数:利用该函数可以从DIB出发来创建GDI 位图.5. CreateDIBSection 函数:该函数能创建一种特殊的DIB,称为DIB项,然后返回一个GDI位图句柄.6. LoadImage函数:该函数可以直接从磁盘文件中读入一个位图,并返回一个DIB句柄.7. DrawDibDraw 函数:Windows提供了窗口视频(VFW)组件,Visual C++支持该组件.VFW中的DrawDibDraw函数是一个可以替代StretchDIBits 的函数.它的最主要的优点是可以使用抖动颜色,并且提高显示DIB的速度,缺点是必须将VFW弋码连接到进程中.3.5图像的几何变换图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.数字图像处理实验报告2一、实验的目的和意义实验目的:本实验内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。

《色彩构成》课程实验指导书

《色彩构成》课程实验指导书

《色彩构成》课程实验指导书广东省经济贸易职业技术计算机应用专业部目录实验一色彩构成中的形态要素 (1)实验二Photoshop 基本工具运用与图形图片处理 8实验三色彩构成 (13)实验一色彩构成 (22)实验四色彩构成在广告设计中的运用实验23实验五色彩综合运用实验 (27)实验一色彩构成实验 (30)实验一色彩构成中的形态要素一、实验课时8课时二、实验目的掌握选区、裁切、自由变换、变形选取工具的使用。

掌握选区、色相/饱和度的选择与调整。

掌握数码色彩的原理。

三、实验内容实验内容一:照片矫正基础1.修饰策略1.组织高效的任务序列2.根据使用图像的方式调整处理流程2.分辨率和图像尺寸【重点1】【难点1】1.图像分辨率:图像中单位长度的像素数目2.显示器分辨率:显示器单位长度的像素数目3.打印机分辨率:3.操作流程概述(以处理后的图像将用于使用Adobe InDesign进行排版):查找、打开、另存为。

4.修齐和裁剪图像『实验3.1』【重点2】5.使用自动调整6.手动调整色调范围(画面的黑白灰层次)【重点3】1.直方图2.色阶7.消除色偏8.替换图像中的颜色9.用“减淡”工具调整明度10.使用海绵工具调整饱和度11.应用USM滤镜12.比较手工调整和自动调整的结果13.保存用于四色印刷的图像实验内容二:色彩模式1.选择和选取工具2.案例概述3.用魔棒工具进行选择1.使用魔棒工具选择某种颜色的区域2.移动选区4.结合使用魔棒和其它选取工具5.选择椭圆和圆形区域1.创建选框时调整其位置2.用键盘快捷键移动选中的像素3.用方向键进行移动4.从中心点开始选择5.移动和修改选区中像素6.移动的同时进行复制6.使用套索工具进行选择7.旋转选区8.使用磁性套索工具进行选择9.裁剪图像和擦除选区中的像素10.更改图片的色彩模式实验内容三:色彩调整1、拍摄完成了,现在来为MM的裙子换个颜色吧。

原图2、一般在提到换颜色时大家最快想到的一定是使用“色相/饱和度”或者“替换颜色”命令,这两种方法确实是很快捷,但是在改变颜色后图像的层次会发生改变。

多媒体技术实验报告内容

多媒体技术实验报告内容

多媒体技术实验报告内容一、实验目的本实验旨在通过学习多媒体技术的基本知识和实践操作,了解多媒体技术的基本原理及其在现实生活中的应用。

二、实验内容1.多媒体技术的基本原理多媒体技术是一种将文字、图形、声音、图像和视频等多种信息元素组合在一起,以达到表达和传达信息的目的的技术。

它主要包括多媒体数据的压缩、解压缩、存储、传输、展示等方面的内容。

在本次实验中,我们将通过学习和实践来熟悉多媒体技术的基本原理。

2.多媒体数据的压缩与解压缩多媒体数据一般具有较大的存储空间和传输带宽需求,因此需要进行压缩以节省资源和提高传输效率。

常用的多媒体数据压缩算法有JPEG、MPEG等。

在本次实验中,我们将学习和实践JPEG压缩算法的原理和操作方法,了解其在静态图像压缩方面的应用。

3.多媒体数据的存储与传输多媒体数据在存储和传输过程中需要遵循特定的格式和协议。

常用的多媒体数据存储格式有BMP、JPEG、AVI等,多媒体数据传输协议有HTTP、RTSP等。

在本次实验中,我们将学习并使用FFmpeg工具来实现多媒体数据的存储、编码和解码操作。

4.多媒体数据的展示与交互多媒体技术最终的目的是通过多种媒体元素的组合,实现信息的表达和传达。

在本次实验中,我们将学习并实践使用Python编程语言和OpenCV库来实现多媒体数据的展示与交互。

具体内容包括在图像上添加文字和图形元素,实现基本的图像处理功能,以及通过摄像头实现实时视频的捕捉和展示等。

三、实验步骤1.学习多媒体技术的基本原理和概念,理解多媒体数据的压缩、解压缩、存储和传输等方面的内容。

2. 学习JPEG压缩算法的原理和操作方法,并使用FFmpeg工具实现JPEG压缩和解压缩操作。

3.学习多媒体数据的存储格式和传输协议,了解各种常用的多媒体数据存储和传输方式。

4. 使用Python编程语言和OpenCV库,实现多媒体数据的展示与交互功能,包括图像的处理、文字和图形的添加以及实时视频的捕捉和展示等。

LabVIEW中的数据存储和数据库操作

LabVIEW中的数据存储和数据库操作

LabVIEW中的数据存储和数据库操作LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程环境,常用于数据采集、控制系统和实验室自动化等应用。

在LabVIEW中,数据存储和数据库操作是非常关键的功能。

本文将介绍LabVIEW中的数据存储和数据库操作的方法和技巧。

一、数据存储在LabVIEW中,数据存储可以通过不同的方式实现,包括文本文件、二进制文件和TDMS文件等。

1. 文本文件存储文本文件存储是最基本和常见的数据存储方式。

在LabVIEW中,可以使用Write to Text File和Read from Text File等函数来实现文本文件的写入和读取。

通过这些函数,可以将数据以文本形式保存到文件中,并在需要时读取出来进行处理。

2. 二进制文件存储二进制文件存储可以更高效地保存和读取数据。

LabVIEW提供了Write Binary File和Read Binary File等函数来实现二进制文件的写入和读取。

与文本文件存储不同的是,二进制文件存储可以直接保存变量的二进制值,而无需进行数据类型转换和解析。

这使得二进制文件存储更加快速和高效。

3. TDMS文件存储TDMS(Technical Data Management Streaming)文件是LabVIEW中提供的一种特殊的数据存储格式。

相比于文本文件和二进制文件,TDMS文件具有更好的可扩展性和兼容性。

通过使用TDMS文件,可以将多个通道的数据以层次结构的方式进行存储,并且可以方便地进行数据筛选和导入导出操作。

二、数据库操作除了文件存储外,LabVIEW还提供了与数据库进行交互的功能。

通过数据库操作,可以将实验数据保存到数据库中,并且可以方便地进行查询和分析。

1. 连接数据库在LabVIEW中,可以使用Database Connectivity Toolkit来连接各种类型的数据库,如MySQL、SQLite和Microsoft SQL Server等。

《大数据技术原理与应用》 期末复习重点

《大数据技术原理与应用》 期末复习重点

大数据技术原理与应用期末复习重点一、1、数据产生方式大致经历了3个阶段:运营式系统阶段、用户原创内容阶段、感知式系统阶段。

2、大数据的特点:数据量大(volume)、数据类型繁多(variety)、处理速度快(velocity)、价值密度低(value);4V+1C (C:复杂度complexity)。

3、云计算的特点:超大规模、虚拟化、高可靠性、通用性、高可伸缩性、按需服务、极其廉价。

4、科学研究方面经历的4种范式:实验、理论、计算、数据。

5、大数据四种计算模式:批量计算(针对大规模数据的批量数据);流计算(针对流计算的实时计算);图计算(针对大规模图结构数据的处理);查询分析计算(大规模数据的存储管理和查询分析)。

6、数据总体上可以分为静态数据和流数据。

7、对静态数据和流数据的处理,对应着两种截然不同的计算模式:批量计算和实时计算。

8、Hadoop的特性:高可靠性、高效性、高扩展性、高容错性、成本低、运行在Linux平台上、支持多种编程语言。

9、Hadoop的核心子项目:HDFS和MapReduce。

HDFS 2.0的新特性HDFS HA和HDFS联邦。

10、YARN体系结构中的三个组件:ResourceManager、ApplicationMaster和NodeManager。

二、1、分布式文件系统是一种通过网络实现文件在多台主机上进行分布式存储的文件系统。

2、名称节点:名称节点也叫主节点,负责管理分布式文件系统的命名空间,负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系。

数据节点:数据节点也叫从节点,负责数据的存储和读取,在存储时,有名称节点分配存储位置,然后由客户端把数据直接写入相应的数据节点。

第二名称节点:完成EditLog合并到FsImage的过程,缩短合并的重启时间,其次作为“检查点”保存元数据的信息。

3、HDFS体系结构:HDFS采用了主从结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。

Arcgis试验二空间大数据库管理系统及属性编辑

Arcgis试验二空间大数据库管理系统及属性编辑

实验二、空间数据库管理及属性编辑1.利用ArcCatalog 管理地理空间数据库,理解Personal Geodatabse 空间数据库模型的有关概念。

2.掌握在ArcMap 中编辑属性数据的基本操作。

3.掌握根据GPS 数据文件生成矢量图层的方法和过程。

4.理解图层属性表间的连接(Join) 或关联(Link) 关系。

预备知识:ArcCatalog 用于组织和管理所有GIS 数据。

它包含一组工具用于浏览和查找地理数据、记录和浏览元数据、快速显示数据集及为地理数据定义数据结构。

ArcCatalog 应用模块帮助你组织和管理你所有的GIS 信息,比如地图,数据集,模型,元数据,服务等。

它包括了下面的工具:浏览和查找地理信息。

记录、查看和管理元数据。

创建、编辑图层和数据库导入和导出geodatabase 结构和设计。

在局域网和广域网上搜索和查找的GIS 数据。

管理ArcGIS Server。

ArcGIS 具有表达要素、栅格等空间信息的高级地理数据模型,ArcGIS 支持基于文件和DBMS(数据库管理系统)的两种数据模型。

基于文件的数据模型包括Coverage、Shape 文件、Grids、影像、不规则三角网(TIN)等GIS数据集。

Geodatabase 数据模型实现矢量数据和栅格数据的一体化存储,有两种格式,一种是基于Access 文件的格式-称为Personal Geodatabase,另一种是基于Oracle 或SQL Server 等RDBMS 关系数据库管理系统的数据模型。

GeoDatabase 是geographic database 的简写,Geodatabase 是一种采用标准关系数据库技术来表现地理信息的数据模型。

Geodatabase 是ArcGIS软件中最主要的数据库模型。

Geodatabase 支持在标准的数据库管理系统( DBMS)表中存储和管理地理信息。

在Geodatabase 数据库模型中,可以将图形数据和属性数据同时存储在一个数据表中,每一个图层对应这样一个数据表。

图形再认实验报告

图形再认实验报告

图形再认实验报告图形再认实验报告一、引言图形再认是一种常见的心理实验方法,用于研究人类的视觉记忆和认知过程。

本实验旨在探究不同条件下,被试在图形再认任务中的表现差异,并进一步分析其认知机制。

二、实验设计本实验采用了单因素设计,自变量为图形呈现时间,因变量为被试的再认准确率。

实验分为两个条件:短呈现时间组和长呈现时间组。

在短呈现时间组中,被试在屏幕上短暂呈现一系列图形,每个图形的呈现时间为200毫秒;而在长呈现时间组中,被试观看同样的图形序列,但每个图形的呈现时间延长至500毫秒。

每个组别的被试人数为30人。

三、实验过程被试在实验开始前接受了一份问卷,以了解其基本信息和视觉记忆能力。

随后,被试被要求坐在实验室的电脑前,屏幕上会呈现一系列图形。

在每个试次中,图形会以随机顺序呈现,被试需要按下键盘上的“是”或“否”键来表明是否之前看到过该图形。

每个试次之间有短暂的间隔,以减少疲劳对实验结果的影响。

四、实验结果通过对实验数据的统计分析,我们发现长呈现时间组的再认准确率明显高于短呈现时间组。

具体而言,在短呈现时间组中,被试的平均准确率为65%,而在长呈现时间组中,被试的平均准确率为80%。

这一结果表明,图形的呈现时间对被试的再认能力有显著影响。

五、讨论与分析为了解释实验结果,我们可以从认知心理学的角度进行分析。

短呈现时间组的低准确率可能是因为被试没有足够的时间来加工和存储图形信息,导致记忆的淡化或遗忘。

相反,长呈现时间组给予了被试更多的时间来观察和加工图形,有助于加强记忆的存储和再现。

此外,个体差异也可能对实验结果产生影响。

一些被试可能具有更强的视觉记忆能力,能够在短时间内准确地辨认图形;而另一些被试可能对图形的特征辨认较差,需要更长的时间来进行加工。

因此,在未来的研究中,可以进一步探究被试个体差异对图形再认的影响。

六、结论本实验通过图形再认任务,研究了图形呈现时间对被试再认准确率的影响。

实验结果表明,长呈现时间组的被试表现出更高的准确率,这可能是因为他们有更多的时间来加工和存储图形信息。

大容量DEM数据的存储与浏览

大容量DEM数据的存储与浏览

大容量DEM数据的存储与浏览摘要:数字高程模型DEM是一种十分重要的数据格式,在很多领域都有广泛应用。

通常,DEM数据较大。

对于海量DEM数据的处理,由于受到PC机性能的限制,如果不对地形数据进行简化处理,将会影响显示效果。

因此,为了在图形工作站上达到令人满意的实时显示和交互操作效果,应采取一定的算法来简化地形数据。

本文利用金字塔影像对DEM数据进行分层分块存储,同时,采用OpenGL作为底层图形驱动程序,对DEM存储结果进行浏览。

实验结果表明,分层分块存储DEM数据,大大减少了硬盘访问时间,提高了浏览速度。

另外,还根据需求对DEM数据进行局部浏览,进一步提高了访问速度。

关键词:数字高程模型;金字塔影像;OpenGL ;Partial browsingThe storage and viewing of large-capacity DEM dataAbstract: Digital Elevation Model is a very important data format. In many areas, DEM data has a wide range of applications. Usually, DEM data is huge. For the processing of the mass DEM data, due to the restrictions of PC-performance, the display of DEM data is not ideal. Therefore, in order to get a satisfactory real-time display and interaction effects on the graphic workstation, we must simplify terrain. This paper uses hierarchical pyramid images to store the DEM data on the basis of the blocks. At the same time, we can view the stored DEM data using OpenGL as the underlying graphics driver. The results shows that hierarchical storage of the DEM data based on the blocks will greatly reduce the time of access of hard disk, and improve the speed of browsing. In addition, we partially browse DEM data according to the requirement, which will further increase the access speed.Key words: Digital Elevation Model; Pyramid image; OpenGL; Partial browsing1 引言数字高程模型(Digital Elevation Model,缩写DEM)是一定范围内规则格网点的平面坐标(X,Y)及其高程(Z)的数据集。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二图形数据的存储【实验目的】1、掌握如何存放图形数据;2、掌握窗口的重绘;3、掌握加入菜单命令与实现;4、掌握删除文档数据。

【实验要求】实验前认真预习MFC编程的基本特点和方法,在进行实验时,应注意爱护机器,按照试验指导书的要求的内容和步骤完成实验,尤其应注意认真观察实验结果,做好记录;实验完成后应认真撰写实验报告。

请保存好本次程序代码,下次实验在本次程序基础上继续。

【实验要点】MFC程序的文档类负责存放文档数据以及存盘和读盘。

文档类还需提供其他类(特别是视图类)取得和修改数据的公开成员函数,使用户能对其查阅和编辑,且需处理直接影响文档数据的菜单命令。

在实验一生成的MiniDraw程序中实现文档类的基本特性。

首先向文档类加入存放用户绘制的每条直线坐标的成员。

然后修改视图类,使它除了绘制直线外,还将每条线放在文档类对象中。

接着,实现视图类的OnDraw成员函数,在窗口要重绘时用保存在文档对象中的数据恢复直线(在上一版MiniDraw中,窗口重绘时擦去直线,因为文档对象没有存放直线坐标)。

最后,在Edit菜单中加入Undo和Delete All命令。

Undo命令擦去最近绘制的直线,Delete All命令删除图中的所有直线。

【实验步骤】一、存放图形数据。

对MiniDraw源代码作几处补充,以便存放图形数据。

定义新类,以存放用户所画的每条线的数据。

在MiniDrawDoc.h的开头CMiniDrawDoc类定义之前加入CLine类定义:class CLine : public CObject{protected:int m_X1,m_Y1,m_X2,m_Y2;public:CLine (int x1,int y1,int x2,int y2){m_X1 = x1;m_Y1 = y1;m_X2 = x2;m_Y2 = y2;}void Draw (CDC *pDC);};CLine数据成员m_X1和m_Y1存放直线一端的坐标,而m_X2和m_Y2存放另一端坐标。

CLine提供初始化这些数据成员的inline构造器,还提供绘制直线的成员函数Draw。

接着,在MiniDrawDoc.h的CMiniDrawDoc类定义开头加入黑体语句,加入所需成员到CMiniDrawDoc类定义:class CMiniDrawDoc : public CDocument{protected:CTypedPtrArray <CObArray , CLine *> m_LineArray;public:void AddLine (int x1,int y1,int x2,int y2);CLine *GetLine (int Index);int GetNumLines ();新数据成员m_LineArray是MFC类模板CTypedPtrArray的实例。

CTypedPtrArray生成一系列类,都是由第一个模板参数指定的类(可能是CObArray或CPtrArray)派生,都用于存放第二个模板参数指定类型的数据项。

这样,m_LineArray是CObArray派生类的对象,存放CLine对象的指针。

CObArray是MFC通用集合类之一,用于存放变量或对象组合。

CObArray实例用数组状的数据结构存放一组CObject对象(或CObject派生的类对象)的指针(CObject是直接或间接派生所有其它他MFC类的MFC类)。

但MiniDraw不用通用CObArray类的实例,而用CTypedPtrArray派生来自CObArray的类,专门用于存放CLine对象。

这种派生类使编译器能进行更广泛的类型检查,帮助减少错误,并减少使用类对象时所需的校正操作。

为使用CTypedPtrArray(或任何其他MFC类模板),必须包括Afxtempl.h MFC头文件。

为了使MiniDraw项目中的任何头或C++源文件可用这个头文件,可以将它包括在标准MFC 程序头文件StdAfx.h中:#include <afxwin.h> // MFC core and standard components#include <afxext.h> // MFC extensions#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls#include <afxtempl.h> //MFC templates#ifndef _AFX_NO_AFXCMN_SUPPORT说明:StdAfx.h放在所有项目的C++源文件开头。

StdAfx.h也是预编译的,即这个文件和所有它包括的头文件在每次修改源文件时并不重新编译,从而节省建立时间。

在文档实现文件MiniDrawDoc.cpp的末尾输入CLine::Draw函数的定义://///////////////////////////////////////////////////////////////////////////// CMiniDrawDoc commandsvoid CLine::Draw(CDC *pDC){pDC->MoveTo (m_X1,m_Y1);pDC->LineTo (m_X2,m_Y2);}Draw调用两个CDC成员函数,MoveTo和LineTo,在当前对象存放的坐标位置绘制线。

为CMiniDrawDoc加入如下函数定义:AddLine、GetLine和GetNumLines。

它们位于MiniDrawDoc.cpp文件的结尾。

void CMiniDrawDoc::AddLine (int x1,int y1,int x2,int y2){CLine *pLine = new CLine (x1,y1,x2,y2);m_LineArray.Add(pLine);CLine *CMiniDrawDoc::GetLine (int Index){if (Index < 0 || Index > m_LineArray.GetUpperBound ())return 0;return m_LineArray.GetAt (Index);}int CMiniDrawDoc::GetNumLines (){return m_LineArray.GetSize ();}AddLine生成新的CLine对象并调用CObArray成员函数Add (),将对象指针加入m_LineArray存放的一组CLine指针中。

m_LineArray存放的指针是索引的,第一个指针索引号为0,第二个指针索为1,依此类推。

GetLine函数返回传入参数指定索引的指针。

GetLine首先检查索引是否在有效范围内(CObArray成员函数GetUpperBound返回最大有效索引)。

然后,GetLine返回对应的CLine 指针。

它是通过调用CTypedPtrArray成员函数GetAt获得的。

GetNumLines返回m_LineArray当前存放的CLine指针个数,通过调用CObArray成员函数GetSize获得。

AddLine、GetLine和GetNumLines都被视图类的成员函数调用。

修改视图类的OnLButtonUp成员函数,它是在文件MiniDrawView.cpp中定义的。

画直线后释放鼠标键时,这个函数结束拖动操作并在最后位置上画直线。

加入调用GetDocument 和AddLine来存放新直线:void CMiniDrawView::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultif (m_Dragging){m_Dragging = 0;::ReleaseCapture ();::ClipCursor (NULL);CClientDC ClientDC (this);ClientDC.SetROP2 (R2_NOT);ClientDC.MoveTo (m_PointOrigin);ClientDC.LineTo (m_PointOld);ClientDC.SetROP2 (R2_COPYPEN);ClientDC.MoveTo (m_PointOrigin);ClientDC.LineTo (point);CMiniDrawDoc *pDoc = GetDocument ();pDoc ->AddLine (m_PointOrigin.x,m_PointOrigin.y,point.x,point.y);}CView::OnLButtonUp(nFlags, point);}从这个修改可以看出,除了显示文档数据外,视图类还需调用文档类的成员函数来更新数据,以响应用户的编辑操作。

二、重绘窗口程序在文档类对象中永久存放直线数据后,窗口重绘时视图类可以用这个数据恢复直线。

视图窗口需要重绘时,系统清除窗口,再调用视图类的OnDraw成员函数。

必须在应用程序向导生成的最小OnDraw函数中加入自己的重绘代码。

为此,在MiniDrawView.cpp文件的CMiniDrawView::OnDraw函数中加入下列标有黑体的行:void CMiniDrawView::OnDraw(CDC* pDC){CMiniDrawDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereint Index = pDoc->GetNumLines ();while (Index --)pDoc->GetLine (Index)->Draw (pDC);}说明:系统实际只清除视图窗占中需要重绘的部分(例如另一窗口盖住的部分)。

加入的代码调用CMiniDrawDoc::GetNumLines函数,以取得当前存在文档对象中的直线数。

对于每一条线,它首先调用CMiniDrawDoc::GetLine函数取得对应CLine对象的指针,然后用这个指针调用CLine::Draw函数来画直线。

三、加入菜单命令由于图形数据存放在文档对象中,在Edit菜单中加入命令,使用户修改数据。

加入清除最后所画直线的Undo命令和清除图中所有直线的Delete All命令。

为了给MiniDraw程序加入Edit命令,单击项目工作区窗口底部的ResourceView标签以显示程序资源。

相关文档
最新文档