综合二简易图形编辑器报告

综合二简易图形编辑器报告
综合二简易图形编辑器报告

综合实验二“简易图形编辑器”实验报告

张良钿20048002129一.总体展示:

下图是我用自己写的“简易图形编辑器”编辑的图形的全屏截屏图片。图中的“indows”文本,“W”是用四条直线拼合而成。所有图形都是在画出后用鼠标选中并调整位置和形状的,右侧的是非模态窗口的“工具栏”。图形源文件为此压缩包中的sky.sky文

件中,可用本编辑软件打开。

二.开发过程:

1. 预期目标(暨需求分析):

A.完成基本功能:交互式绘制图形(至少包括矩形和文本),绘制完成的图形能够正确地重现,绘制结果可以保存到文件并读出;

B.完成高级要求:矩形、文本的颜色、文本字体可调,能够通过鼠标点击选中图形,并

进行属性的修改

C.拥有“工具栏”、“状态栏”等,使程序具有更好的人机交互性;

D.支持“剪贴”、“复制”、“粘帖”、“删除”等操作,能够直接定位图元并编辑。

2. 数据结构选择(开发中最重要的环节):

由于对C++还不熟悉,因此考虑的都还是C中的方法。用结构封装图元和文本,图元结构MYGRAP和文本结构MYTEXT,详见源程序中的MyDoc.h文件。

使用动态申请内存的数据存储方法,具体的方案考虑过三种,具体如下:

A.动态数组:像梁老师上课时介绍的那样,当存储空间不足时,new 出更大的一块内存,然后memcpy,再delete 原空间。优点:简单,易于理解和操作。缺点:运行效率不高,

尤其是当数据量较大时,每次都要向内存池申请一块很大的连续的内存,然后memcpy 大量数据,浪费了大量内存和CPU运行时间,虽然现在的内存和CPU性能很好,但它们是给用户用的,而不是给程序员使用的。因此在不影响开发效率的情况下,应尽量提高运行效率。

B.双向链表:链表的运行效率明显高于动态数组,且易于构建图层的优先级结构(即图元重叠是的上下顺序)。故在刚开始的时候,我采用了双向链表的结构,并完成了双向链表相关函数的编写(在MyDoc.cpp文件末尾被注释的部分)。但在开发过程中,由于需要能根据图层序号直接定位图层,这样就需要从链头或链尾搜索。于是萌生了对链表进行改造的想法。

C.映射表:我不是是否有这种数据结构,也不知道它的正确名称,因为这是我自己构思出的,姑且称其为“映射表”。它由一系列动态的离散的节点和一个动态的数组表构成。详

MYTEXT

MYGRAP MYGRAP

映射表中的每一个元素都是一个指针,指向不同的离散的MYGRAP 或MYTEXT的结构便量。表的管理策略同动态数组一样,先申请一个一定长度的数组,当表不够长时,new 出一个更长的数组,然后memcpy,再删除原数组。由于数组的每个元素存储的只是一个指针,占用的内存很小,只需很少的资源即可动态整理。每个节点的管理策略同链表的节点相同,都是new和delete 的。映射表的优点:运行和存储效率基本接近链表,但可以根据层序号直接定位图元节点,所有的添加、删除、查找、插入、交换层顺序等操作都只需要对映射表进行整理即可,操作方便快速。缺点:增加了一个结构层次,不易理解。

经比较,我选择了映射表的结构,由于MYGRAP 和MYTEXT两种结构不同,尤其是MYTEXT中还有一个字符串指针,因此虽然从存储原理上两种结构的指针没有区别,但仍

需一个PMYGRAP和一个PMYTEXT分别指向才能通过编译,连void *也不行。于是构造了一个新结构LAYERMAP 作为映射表数组的元素,如下:

typedef struct _LAYERMAP_

{

int iFlg; // GRAPDATA or TEXTDATA,

PMYGRAP pGData;

PMYTEXT pTData;

//void *pData; //pointer to MYGRAP or MYTEXT

}LAYERMAP,*PLAYERMAP;

每次在访问图元节点时都要先判断iFlg,再决定使用pGData 还是pTData,增加了程序的

复杂度,不得以而为之,应该还有更好的解决策略,我还没想到。

数据结构及其相关函数在源文件MyDoc.cpp中,函数的设置有点C++的味道,可以方便地

做成一个类。

3. 具体开发:

选定数据结构,写好MyDoc.cpp后,工作以及完成了一半。很快就完成了基本功能的实现和调试。开始完成扩展功能。

A.实现鼠标选中图元和编辑图元。

希望能实现类似MS-Word 中的图形编辑那样的效果。

a.鼠标点击选中最外层的图元,编写函数bool SearchLayer(POINT*a_pPT, int

*pCurLayerCnt),其中调用了判断点在直线上的函数bool PointInLine(POINT *a_pt, POINT *a_pStart, POINT *a_pEnd, int a_LineWidth),判断点在矩形内的函数bool PointInRect(POINT *a_pt, POINT *a_pStart, POINT *a_pEnd),判断点在椭圆内的函数bool PointInEllipse(POINT *a_pt, POINT *a_pStart, POINT *a_pEnd)。编写加调试共约2小时,对数学公式做了化简和近似,确保了运算量的最小化,调试结果良好,矩形、椭圆、直线、文本框都能准确辨认。

b.绘制图元被选中时的标志(外框上的四个小圆和四个小矩形)以及鼠标在图元附件的不

同Cursor。编写了函数bool DrawSltFlg(HDC hdc, PMYGRAP a_pFlgGrap, PLAYERMAP a_pLayer, int a_DrawOrClear),和bool DrawSltFlg(HDC hdc, PMYGRAP a_pFlgGrap, PLAYERMAP a_pLayer, int a_DrawOrClear),并大量增补了主消息处理函数WinProc(),编写加调试用了2~3 小时,实现效果良好。但整个程序结构开始混乱,尤其是WinProc()过于冗长,程序流程在七种操作模式间跳转,结构不清晰(自己转晕了)。

CurrOpMode;

#define RYDRAW 1 // 预备绘图

#define DRAWING 2 // 正在绘图

#define RYTEXT 3 // 准备输入文本

#define TEXTRECTING 4 // 正在绘制文本矩形框

#define TEXTINPUTING 5 // 正在输入文本

#define RYSELECTAGRAP 6 // 预备选择图元

#define SELECTEDAGRAP7 // 已经选择中了一个图元

#define MOVEINGAGRAP8 // 移动一个图元

#define MODIFYINGAGRAP9 // 改变一个图元的形状

c.绘制图元移动和修改过程中的虚线框,编写完代码后发现程序运行混乱了,一时间也

查不出原因,就将其删除或注释了,此功能先搁置。

d.移动或修改选中的图元,编写了函数bool MouseAroundPoint(POINT*a_ptMoser,

POINT *a_ptCenter),其余的都在WinProc()中增添,加剧了WinProc()的混乱度。耗时约3 小时,完成编写与调试。移动和修改功能都已实现,实现效果还不错,但由于没有了虚线框,移动过程的可视化与交互性不够。

B.“工具栏”的开发,用一个dialog绘制工具栏,将其创为非模态对话窗。原想使用TAB Contrl,但由于从没用过,估计要花不少时间学习,而离交作业的最后期限很近了,就用了两个BUTTON代替TAB 来切换“图层和图元”界面,编写了ToolBar.cpp文件,编写是特别注意了其可扩展性。“图元”界面用于选择图元操作,“图层”界面用于显示和修改当前选中的图元的参数信息,提供了修改图元的快捷方式。由于时间紧迫以及程序的结构已经混乱,代码尚未编写完成,“图层”功能搁置。

C.“剪切”、“复制”、“粘帖”的功能不难写,由于时间原因未编写。“撤销”功能,我目

前还没想出好的策略,似乎只能开辟空间暂存操作记录和数据。“删除”功能是在绘制实验

报告的那幅图时,发现没有“删除”很是不便,才临时增加的。由于MyDoc.cpp 中相关函数已写好,故只增加了三行代码就完成了“删除”。

三.总结回顾:

总用时:约30~50小时

代码:2100+行

完成程度:完成老师要求,完成自己要求的70%

个人满意程度:70~75%,基本满意

老师满意程度:待定

收获:

1.熟悉了指针的用法,编写的代码中满是指针,传来传去,指来指去的,幸运的是

基本没出什么大麻烦。

2.深刻意识到OOP的重要性,如果说编写过程控制程序用C 还可以的话,那么编写

UI(用户界面)就非C++莫属了。不是说C 不行,只是很容易混乱。

遗憾:

1.未能完成全部功能。但即使完成了预期目标,也还会有这种能遗憾的,因为总会

有新的功能要完善。善无止境,直到人累死,这样不好。

2.刚开始时还觉得自己的程序结构还不错,有C++的味道,但功能写得越多程序也

越混乱了,尤其是昨晚11点多时人已经晕得有些想吐了,就赶紧休息去了。还是王彬说的那种结构好,窗体过程函数只负责向各个对象分发消息,而不是把所有的任务都揽在自己身上,使自己变得越来越臃肿混乱。

3.程序中还有不少BUG,如画或修改的图形多了,显示会混乱,但图形的数据结构

没有被破坏,这时可以要赶紧保存,然后重新运行再打开文件读取,可保证编辑

结构不丢失。呵呵……

4.时间紧,预期功能太多,经验不足,写得累坏了,匆忙完工,连实验报告也不想

排版了。好好休息。

张良钿

2007-6-3 18:00

于寝室

哪个软件编制流程图好用

流程图是一种能够帮忙办理者了解实际作业活动的流程图,用于消除作业进程中剩余的作业环节。但是制造作业流程图的软件并不多,或许很多人会挑选用Office Word或PowerPoint来制造,但是这两个软件并非是专业的流程图软件,导致在使用进程中会遇到各种问题,比方线条与方框无法刚好衔接,或许是制造进程冗杂导致体会不佳。 首先需要使用下载正版的亿图图示软件,用户在网站上下载的都是“试用版”,因此,需要购买之后,才能成为正式版。 在下载安装之后,首先需要注册一个账户。注册账户也很简单,只需填写用户名、密码这些就可以了。

之后,在“帮助”菜单下,点击“激活”按钮,就可以进行购买了。购买之后,获得产品密钥,也就是激活码。有了激活码,就可以使用了。 下面来介绍详细的使用方法。 第一步,需要启动亿图图示。之后,从预定义模板和例子中,选择思维导图。从右侧选择一种思维导图类型,双击图标。在打开模板或者实例的时候,相关的符号库就会被打开。拖拽需要的形状符号到绘图页面。丰富的预定义模板库让用户绘制图形无需从头开始,只要轻轻的拖曳即可做出漂亮的图形。系统提供的实例模板库,让您思路开阔,在绘图时不断学习进步。

模板形状库中全部矢量绘图,缩放自如,支持插入其它格式的图形和OLE对象,最大限度地减少用户输入量。 第二步,添加主题。通过用浮动按钮添加:点击浮动按钮右侧功能键进行添加。软件界面左侧 的符号库中有内置的图形符号,根据需求选择相对应的图形,直接拖拽至绘图界面即可。只要该图 形拖拽至需要吸附的主题附近,然后松开鼠标就会自动吸附了。 第三步,通过“思维导图”菜单栏进行编辑。 插入主题或者副主题:选中需要添加主题或者副主题的图形,点击“插入主题”或者“副主题”即可。 插入多个主题:选中需要插入的图形,点击“添加多个主题”,然后在弹出的文本框中输入需要 添加的主题名称,一行代表一个主题。

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

计算机图形学课程设计报告

一、设计内容与要求 1.1、设计题目 算法实现时钟运动 1.2、总体目标和要求 (1)目标:以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到巩固和实践计算机图形学课程中的理论和算法;学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。 (2)总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。(3)开发环境:Viusal C++ 6.0 1.3、设计要求 内容: (1)掌握动画基本原理; (2)实现平面几何变换; 功能要求: (1)显示时钟三个时针,实现三根时针间的相互关系;

(2)通过右键菜单切换时钟背景与时针颜色; 1.4设计方案 通过使用OpenGL提供的标准库函数,综合图形学Bresenham画线和画圆的算法,OpenGL颜色模型中颜色表示模式等实现指针式时钟运动,并通过点击右键菜单实习时钟背景与时针颜色的转换。根据Bresenham画线和画圆的算法,画出时钟的指针和表盘。再根据OpenGL颜色模型定义当前颜色。设置当时钟运行时交换的菜单,运行程序时可变换时钟背景与时针的颜色。最后再设置一个恢复菜单恢复开始时表盘与指针的颜色。

二、总体设计 2.1、过程流程图

2.2、椭圆的中点生成算法 1、椭圆对称性质原理: (1)圆是满足x轴对称的,这样只需要计算原来的1/2点的位置;(2)圆是满足y轴对称的,这样只需要计算原来的1/2点的位置; 通过上面分析可以得到实际上我们计算椭圆生成时候,只需要计算1/4个椭圆就可以实现对于所有点的生成了。 2、中点椭圆算法内容: (1)输入椭圆的两个半径r1和r2,并且输入椭圆的圆心。设置初始点(x0,y0)的位置为(0,r2); (2)计算区域1中央决策参数的初始值 p = ry*ry - rx*rx*ry + 1/4*(rx*rx); (3)在区域1中的每个Xn为止,从n = 0 开始,直到|K|(斜率)小于-1时后结束; <1>如果p < 0 ,绘制下一个点(x+1,y),并且计算 p = p + r2*r2*(3+2*x); <2>如果P >=0 ,绘制下一个点(x+1,y-1),并且计算 p = p + r2*r2*(3+2*point.x) - 2*r1*r1*(y-1) (4)设置新的参数初始值; p = ry*ry(X0+1/2)*(X0+1/2) + rx*rx*(Y0-1) - rx*rx*ry*ry; (5)在区域2中的每个Yn为止,从n = 0开始,直到y = 0时结束。 <1>如果P>0的情况下,下一个目标点为(x,y-1),并且计算 p = p - 2rx*rx*(Yn+1) + rx*rx;

文章编辑程序设计

课程设计报告 课程设计名称数据结构课程设计 专业计算机科学与技术 班级 学号 姓名 指导教师 成绩 2012年2月26日

数据结构课程设计 ——《文章编辑》 一、设计任务与要求 (1) 二、需求分析 (1) 2.1 用户需求分析 (1) 2.2 功能需求分析 (1) 三、概要设计 (2) 3.1 各模块的算法设计说明 (2) 3.2 存储结构设计说明 (4) 四、详细设计 (4) 五、实际运行结果 (6) 六、收获与体会 (9) 七、主要参考资料 (9)

一、设计任务与要求 问题描述:输入一页文字,程序可以统计出文字、数字、空格的个数。 静态存储一页文章,每行最多不超过80个字符,共N行。 要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。 存储结构使用线性表,分别用几个子函数实现相应的功能; 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。 输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章; 二、需求分析 2.1 用户需求分析 随着社会的发展,人们对信息的处理要求逐渐增高,设计这个程序是为了方便人们能更加迅速地处理文字信息,从而提高工作效率。 2.2 功能需求分析 功能分析如图所示

功能说明: 输出原文:此功能是将原先录入的信息读出,并在屏幕上显示出来。 统计文章字数:此功能是统计出文章中的字母数,空格数,数字数和文章总字数。 统计某一字符串在文章中出现的次数:通过用户输入要查询项来统计要查询的字符在文章中的出现次数。 删除某一字符串并输出文章:删除文章中用户希望删除的字符,并将修改后的文章在屏幕上显示出来。 结束:退出程序。 2.3 系统需求分析(开发环境、工具) Windows操作系统,visual6.0编译环境 三、概要设计 3.1 各模块的算法设计说明 本程序由输入、输出、统计、查找、删除、选择功能模块组成,以下为重要模块的流程图:

计算机图形学课程设计书

计算机图形学课程设计 书 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

课程设计(论文)任务书 理学院信息与计算科学专业2015-1班 一、课程设计(论文)题目:图像融合的程序设计 二、课程设计(论文)工作: 自2018 年1 月10 日起至2018 年1 月12日止 三、课程设计(论文) 地点: 2-201 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)熟悉Delphi7的使用,理论与实际应用相结合,养成良好的程序设计技能;(2)了解并掌握图像融合的各种实现方法,具备初步的独立分析和设计能力;(3)初步掌握开发过程中的问题分析,程序设计,代码编写、测试等基本方法;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; (5)在实践中认识、学习计算机图形学相关知识。 2.课程设计的任务及要求 1)基本要求: (1)研究课程设计任务,并进行程序需求分析; (2)对程序进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;(3)实现各功能模块代码; (4)程序组装,测试、完善系统。 2)创新要求: 在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。

3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写课程设计论文 (2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结(3)论文装订按学校的统一要求完成 4)参考文献: (1)David ,《计算机图形学的算法基础》,机械工业出版社 (2)Steve Cunningham,《计算机图形学》,机械工业出版社 (3) 5)课程设计进度安排 内容天数地点 程序总体设计 1 实验室 软件设计及调试 1 实验室 答辩及撰写报告 1 实验室、图书馆 学生签名: 2018年1月12日 摘要 图像融合是图像处理中重要部分,能够协同利用同一场景的多种传感器图像信息,输出一幅更适合于人类视觉感知或计算机进一步处理与分析的融合图像。它可明显的改善单一传感器的不足,提高结果图像的清晰度及信息包含量,有利于更为准确、更为可靠、更为全面地获取目标或场景的信息。图像融合主要应用于军事国防上、遥感方面、医学图像处理、机器人、安全和监控、生物监测等领域。用于较多也较成熟的是红外和可见光的融合,在一副图像上显示多种信息,突出目标。一般情况下,图像融合由

有什么好的流程图编辑软件

流程图是用特定符号表述工作事项顺序的一种图示,它可以帮助管理者更好的了解实际工作内容,去除掉、合并多余环节,从而提高工作效率。 首先需要使用下载正版的亿图图示软件,用户在网站上下载的都是“试用版”,因此,需要购买之后,才能成为正式版。 在下载安装之后,首先需要注册一个账户。注册账户也很简单,只需填写用户名、密码这些就可以了。

之后,在“帮助”菜单下,点击“激活”按钮,就可以进行购买了。购买之后,获得产品密钥,也就是激活码。有了激活码,就可以使用了。 下面来介绍详细的使用方法。 第一步,需要启动亿图图示。之后,从预定义模板和例子中,选择思维导图。从右侧选择一种思维导图类型,双击图标。在打开模板或者实例的时候,相关的符号库就会被打开。拖拽需要的形状符号到绘图页面。丰富的预定义模板库让用户绘制图形无需从头开始,只要轻轻的拖曳即可做出漂亮的图形。系统提供的实例模板库,让您思路开阔,在绘图时不断学习进步。

模板形状库中全部矢量绘图,缩放自如,支持插入其它格式的图形和OLE对象,最大限度地减少用户输入量。 第二步,添加主题。通过用浮动按钮添加:点击浮动按钮右侧功能键进行添加。软件界面左侧 的符号库中有内置的图形符号,根据需求选择相对应的图形,直接拖拽至绘图界面即可。只要该图 形拖拽至需要吸附的主题附近,然后松开鼠标就会自动吸附了。 第三步,通过“思维导图”菜单栏进行编辑。 插入主题或者副主题:选中需要添加主题或者副主题的图形,点击“插入主题”或者“副主题”即可。 插入多个主题:选中需要插入的图形,点击“添加多个主题”,然后在弹出的文本框中输入需要 添加的主题名称,一行代表一个主题。

图形学场景设计

图形学场景设计

计算机图形学课程设计报告 题目自然场景设计 院(系、部) 专业班级 学号

姓名成绩

1 设计目的与要求 1.1设计题目 自然场景设计 1.2 设计目的 以小组合作的方式绘制一个自然场景,给绘制的实体添加纹理光照效果,进一步巩固所学知识,提高团队合作能力 1.3 设计要求 (1)采用真实感图形学技术设计一个自然场景(2)模拟出水、云、山体等至少三种景物(3)实现场景的漫游 (4)对设计出的图像进行光照处理 (5)将图片的纹理贴附到物体表面 2 总体设计 2.1 功能简介 创建一个900*600的Windows窗口,在窗口中显示冰箱、电灯、茶壶三个实体,根据电灯位置在

地面上绘制个实体的投影;为茶壶添加纹理;利用键盘的方向键控制冰箱旋转,实现场景漫游2.2 功能模块图 主 初始化实体绘键盘操 作函数 电灯冰箱 茶壶 2.3 软件各模块功能介绍 2.3.1冰箱和茶壶的绘制 由四边形拼接出冰箱,通过平移旋转函数放置到指定位置,同时实现茶壶的绘制,在茶壶上添加纹理效果,通过平移旋转变换放置到冰箱上面2.3.2顶灯的绘制

绘制出一个带灯罩的电灯,并且将光源放置在灯泡的位置 2.3.3 设置光照 设置光照的各种参数,为场景添加光照效果,让实体具有立体效果 2.3.4 纹理图片生成 用数组存储一幅自己设计的纹理图片,方便实体添加纹理效果时的调用 2.3.5 影子生成 根据需求为场景中的实体添加阴影效果,使得场景效果更加逼真 2.3.6 法向量设置 为场景设置法向量,确保实体在不同的角度都能被看到 3 详细设计及关键代码 3.1 光照模块详细设计 3.1.1 光照设置功能 设置光照的各种参数,为场景添加光照效果,让实体具有立体效果 3.1.2 光照设置设计

计算机图形学课程设计

《计算机图形学》实验报告 题目: 3D真实感场景绘制 :郭继杰 学号: 2014214168 班级:地信141 学院:理学院 指导老师:解山娟 日期: 2017年1月1日

一、实验目的 结合一学期所学计算机图形学知识,基于专业背景,使用OpenGL 绘制简单的3D真实感图形场景。 二、实验要求 应用光栅化算法、多边形裁剪计算以及消隐算法在场景绘制中,其中真实感场景绘制包括颜色模型、纹理模型、雾化模型、运动模型以及环境光、漫反射、镜面反射等光照模型设置。 三、实验小组及任务分工

四、实验容 1.实验前期工作 前期工作经过小组成员充分讨论,资料收集,最终确定小组实验模板为以下两幅场景。目标是实现一艘简单3D帆船模型以及一辆3D小车模型 2.程序编译环境:Visual Studio 2012 3.光照模型建立过程 光照模型建立流程图: 3.1设置光照模型相应指数

3.2打开光源 光照模型设计过程有两点注意的是: 1、glShadeModel函数用于控制opengl中绘制指定两点间其他点颜色的过渡模式,参数一般为GL_SMOOTH、GL_FLAT,如果两点的颜色相同,使用两个参数效果相同,如果两点颜色不同,GL_SMOOTH会出现过渡效果,GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点。 glShadeModel(GL_FLAT) 着色模式glShadeModel(GL_SMOOTH)着色模式(可以看出GL_SMOOTH模式下颜色更加光滑) 2、需要使用光照模型时必须启用,glEnable(GL_LIGHTING)(启用灯源)、

数据结构文章编辑程序的设计Word版

数据结构(c语言版)课程设计报告 文章编辑程序的设计 学院:信息科学技术学院 班级:信息工程09级 1 班 学号:200941843107 姓名:董升 指导教师:何儒云 完成日期:2010年12月

目录

1.需求分析——文章编辑........................................................................................................... - 3 - 2.程序设计................................................................................................................................... - 3 - 结构体的设计:.................................................................................................................. - 3 -函数的设计:...................................................................................................................... - 3 -主函数的设计:.................................................................................................................. - 8 - 3.测试分析................................................................................................................................... - 9 - 4.用户说明................................................................................................................................. - 10 - 5.经验和体会............................................................................................................................. - 10 - 6.附录——程序完整原代码..................................................................................................... - 10 -

计算机图形学 课程设计作品

《计算机图形学Visual c++版》考试作业报告 题目:计算机图形学图形画板 专业:推荐IT学长淘宝日用品店530213 班级:推荐IT学长淘宝日用品店530213 学号:推荐IT学长淘宝日用品店530213 姓名:推荐IT学长淘宝日用品店530213 指导教师:推荐IT学长淘宝日用品店530213 完成日期: 2015年12月2日

一、课程设计目的 本课程设计的目标就是要达到理论与实际应用相结合,提高学生设计图形及编写大型程序的能力,并培养基本的、良好的计算机图形学的技能。 设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握计算机图形学基本知识和算法设计的基本技能术,掌握分析、解决实际问题的能力。 通过这次设计,要求在加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 二、设计内容推荐IT学长淘宝日用品店530213 设计一个图形画板,在这个图形画板中要实现: 1,画线功能,而且画的线要具备反走样功能。 2, 利用上面的画线功能实现画矩形,椭圆,多边形,并且可以对这些图形进行填充。 3,可以对选中区域的图形放大,缩小,平移,旋转等功能。 三、设计过程 程序预处理:包括头文件的加载,常量的定义以及全局变量的定义 #include "stdafx.h" #include "GraDesign.h" #include "GraDesignDoc.h" #include "GraDesignView.h" #include "math.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //******自定义全局变量 int type = -1; CPoint point1; CPoint point2; CPoint temp[2];

AE图形编辑器

AE图形编辑器 图表编辑器中的图表选项 单击图表编辑器底部的“图表类型和选项”按钮可从以下选项中进行选择: 自动选择图表类型 自动为属性选择适当的图表类型:用于空间属性(如位置)的速度图表和用于其他属性的值图表。 编辑值图表 为所有属性显示值图表。 编辑速度图表 为所有属性显示速度图表。 显示参考图表 在后台显示未选择且仅供查看的图表类型。(图表编辑器右侧灰显的数字表示参考图表的值。) 显示音频波形 在图表编辑器中显示至少具有一个属性的任意图层的音频波形。 显示图层的入点/出点 在图表编辑器中显示具有属性的所有图层的入点和出点。入点和出点显示为大括号。

显示图层标记 在图表编辑器中显示至少具有一个属性的任意图层的图层标记(如果有)。图层标记显示为小三角形。 显示图表工具提示 打开和关闭图表工具提示。 显示表达式编辑器 显示或隐藏表达式编辑器字段。 允许在帧之间插入关键帧 允许在两帧之间放置关键帧以微调动画。 在图表编辑器中平移和放大 ?要垂直或水平平移,请使用抓手工具拖动 ?要垂直平移,请滚动鼠标滚轮。 ?要水平平移,请在按住Shift 键的同时滚动鼠标滚轮。 ?要放大,请单击缩放工具。 ?要缩小,请在按住Alt 键(Windows) 或Option 键(Mac OS) 的同时单击缩放工具。 ?要使用鼠标滚轮进行缩放,请在按住Alt 键(Windows) 或Option 键(Mac OS) 的同时滚动以水平缩放。按Ctrl 键(Windows) 或 Command 键(Mac OS) 以垂直缩放。 ?要水平缩放,请在按住Alt 键(Windows) 或Option 键(Mac OS) 的同时使用缩放工具向左拖曳以缩小或向右拖曳以放大。 ?要垂直缩放,请在按住Alt 键(Windows) 或Option 键(Mac OS) 的同时使用缩放工具向上拖曳以放大或向下拖曳以缩小。 自动缩放高度并适合 自动缩放高度 切换自动缩放高度模式来自动缩放图表的高度,以使其适合图表编辑器的高度。仍然必须手动调整水平缩放。 适合所选项

数据结构课程设计文章编辑(附录中有全部代码)

课程设计任务书 专业名称:计算机科学与技术(软件工程) 课程名称:数据结构课程设计 设计题目:文章编辑问题 起止时间:2013年6 月24 日至2013年7 月12 日 问题描述 静态存储一页文章,每行最多不超过80个字符,共N行,程序可以统计出文字、数字、空格的个数,并且可以对文章中特定内容进行查找及替换,同时也可以删除指定内容。 基本要求 (1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)查找出文章中某一段文字,并用其他文字进行替换; (4)删除某一子串,并将后面的字符前移。 输出形式: (1)分行输出用户输入的各行字符; (2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"; (3)查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果; (4)输出删除某一字符串后的文章; 实现提示 存储结构使用线性表,分别用几个子函数实现相应的功能,并且使用菜单的形式,可以选择所要进行的操作(查找、替换、删除、统计等)。

文章编辑系统 1概要设计 本次课程设计的题目是文章编辑系统,本系统的功能描述如下:用户新建文本、浏览新建文本、文本字符统计、指定字符串统计、指定字符串删除、指定字符串替换等操作。 1.新建文本 2.浏览输入文本 3.文本字符统计 4.指定字符串统计 5.指定字符串删除 6.指定字符串替换 7.退出系统 本系统包含七个功能模块,分别为:新建文本模块,浏览输入文本模块,指定字符串统计模块,指定字符串删除模块,指定字符串删除模块,指定字符串替换模块以退出系统模块。新建文本模块实现用户录入文本信息,并且系统自动保存录入信息。浏览输入文本模块实现了显示用户录入信息的功能。指定字符串统模块实现了对英文字母数和空格数及整篇文章总字数的统计。指定字符串统计实现了统计用户自定义字符串个数的功能。指定字符串删除模块实现了对用户自定义字符串的删除。指定字符串替换模块实现了替换用户自定义字符串为用户定义的新字符功能。退出系统模块实现了退出系统功能。

计算机图形学课程设计报告

计算机图形学 课程设计报告 设计课题: 专业班级: 学号: 学生姓名: 指导教师: 设计时间:2018.12.06

中南林业科技大学涉外学院理工系计算机图形学课程设计任务书

指导教师:廖宁教研室主任: 2018年12月06 日注:本表下发学生一份,指导教师一份,栏目不够时请另附页。 课程设计任务书装订于设计计算说明书(或论文)封面之后,目录页之前。 目录 一.设计目的……………………………………………………………二.设计要求…………………………………………………………… 1.构建基础类…………………………………………………… 2.构建直线类…………………………………………………… 3.构建变换类…………………………………………………… 4.构建填充类…………………………………………………… 5.构建光照类……………………………………………………三.开发环境…………………………………………………………四.详细设计 五.源程序 六.程序运行效果图 七.总结

设计目的 ?培养对图形建模、变换、投影、消隐、光照原理的理解和应用。 ?培养图形类的编程能力。 ?培养计算机图形学应用软件开发的能力。 设计要求 深入研究计算机图形学的生成原理,设计算法实现具体的类。 1.构建基础类 实现CP2类绘制二维点;实现CP3类绘制三维点;实现CRGB 类处理RGB颜色;实现CVector类处理矢量。 2.构建直线类 实现CLine类绘制任意斜率的直线、实现CALine类绘制任意斜率的反走样直线、实现CCLine类绘制任意斜率的颜色渐变直线、实现

CACLine类绘制任意斜率的反走样颜色渐变直线。 3.构建变换类 实现CTransForm完成二维和三维图形变换。 4.构建填充类 实现CFill类使用有效边表算法填充多边形、实现CZBuffer类进行深度缓冲消隐,并使用Gouraud和Phong明暗处理填充图形面片。 5.构建光照类 实现CLight类设置点光源、实现CMaterial类设置物体材质、实现CLighting类对物体实施光照。 开发环境 Viusal C++ 6.0的MFC框架。 详细设计 1.利用函数Ellipse画出人物的脸,并用给脸填充颜色。再利 用Ara画出人物的嘴巴。CRect确定人物的眼睛,给眼睛填 充颜色。利用画笔画出人物的鼻子。 2.添加ddaline()成员函数,编写自定义的成员函数ddaline ()程序,编写OnDraw()函数,画出人物的脚和脚趾。 3.添加星星star()成员函数,编写自定义的成员函数star() 程序,确定五角星的位置、大小和颜色。

计算机图形学课程设计

《计算机图形学》课程设计报告题目名称:球体背面剔除消隐算法 专业计算机科学与技术 班级计科15升-1班 学号 1516353004 姓名 指导教师王玉琨 2016 年 06 月 07 日

目录 设计内容与要求 (03) 总体目标和要求 (03) 内容与要求 (03) 总体设计 (03) 2.1 球的消隐处理基本原理 (03) 2.2 具体设计实现 (04) 详细设计 (04) 3.1调试后正确的程序清单 (04) 功能实现 (08) 4.1程序运行结果 (09) 4.2 功能实现及分析 (09) 总结 (09) 参考文献 (10)

球体背面剔除消隐算法 第 1章设计内容与要求 1.1 总体目标和要求 课程设计的目的:以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统, 并能从某些方面作出评价和改进意见。 通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到: 1) 巩固和实践计算机图形学课程中的理论和算法; 2) 学习表现计算机图形学算法的技巧; 3) 培养认真学习、积极探索的精神; 4) 具备通过具体的平台实现图形算法的设计、编程与调试的能力; 5) 完成对实验结果分析、总结及撰写技术报告的能力。 总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。 开发环境:Viusal C++ 6.0 1.2 内容与要求 球体背面剔除消隐算法 内容:(1)掌握背面剔除消隐算法原理; (2)实现矢量点积与叉积运算; (3)透视投影变换 (4)曲面体经纬线划分方法 功能要求: (1)绘制球体线框模型的透视投影图,使用背面剔除算法实现动态消隐; (2)通过右键菜单显示消隐效果,右键菜单有两个选项:未消隐与消隐; (3)使用键盘的上下左右控制键旋转消隐前后的球体; (4)单击左键增加视距,右击缩短视距; 第2章总体设计 2.1 球的消隐处理基本原理 球体的曲面通常采用一组网格多边形来表示,即把曲面离散成许多小平面片,用平面逼近曲面,一般使用许多四边形来逼近曲面。 网格四边形愈多,逼近曲面的精度就愈高,逼近效果就愈好,曲面看起来就越光滑。一般根据实际需要来确定合适的逼近精度即网格多边形数目。 当曲面表示为一组网格多边形时,消隐处理的主要工作是确定各网格多边形的可见性,由此可用平面立体的算法对曲面进行消隐处理。 球面的参数方程为:

文章编辑课程设计报告

实验报告 (课程设计)课程名称:数据结构 实验项目名称:文章编辑 学院:计算机与软件学院指导教师: 报告人: 实验时间 实验报告提交时间: 教务处制

实验项目名称 一、问题描述 描述算法设计的内容、约束条件,要求达到的目标等内容。(由老师公布) 输入一页文字,每行最多不超过80个字符,共N行; 程序可以统计出文字、数字、空格的个数 要求在光标下(与记事本相似)做插入、删除等操作 要求能够存盘,并能对老文件打开进行修改操作 采用的数据结构及其算法:线性结构[采用顺序存储方式];查找、插入、删除 二、基本要求 描述算法设计项目应达到的基本要求。 应该实现基本的删除插入查找打开文件以及存盘等操作.并能对打开的文件里的内容进行插入删除查找等操作,并且在进行完这些操作之后能够进行存盘. 三、分析与实验 分析算法设计方法,拟采用的数据结构(类结构)与主要算法实现原理等内容。 拟采用链表进行操作,与字符串结合. 主要运用了KMP算法进行查找操作,在删除中也有涉及. void GetNext(string p, int next[]) //求模式串p的next[j]的值 { int j = 0, k = -1; next[0] = -1; int length = p.length() - 1; while (j

else k = next[k]; } } int KMPFind(string p, int next[], string q,int search[]) //用KMP算法在主串中查找子串,p为主串,q为子串{ int i = 0, j = 0, k = 0, plength = p.length(), qlength=q.length(),flag=0,t=0; while (i < plength) { if (j == -1 || p[i] == q[j]) { i++; j++; } else j = next[j]; if (j == qlength) { flag++; search[t]= i-qlength;//flag存放的是每一次匹配到的字符的首位置 t++; } } return flag; } Search[]数组存放子串出现的位置.

计算机图形学课程设计--图形绘制变换教案资料

计算机图形学 实验报告 课程名称 : 计算机图形学 实验名称 :图形绘制与变换学院 : 电子信息工程学院专业 : 计算机科学与技术班级 : 11计科本 01班学号 : 姓名 : 张慧 指导教师 : 王征风 二零一四年

目录 一、引言--------------------------------------------------------------------- 3 二、设计需求----------------------------------------------------------------- 4 设计目标--------------------------------------------------------------- 4设计环境--------------------------------------------------------------- 4 VC++ -------------------------------------------------------------- 4 MFC --------------------------------------------------------------- 4设计题目及要求 -------------------------------------------------------- 5总体流程图------------------------------------------------------------ 5三、课程设计原理------------------------------------------------------------- 5 实现的算法------------------------------------------------------------- 5 Bresenham算法画直线------------------------------------------------ 6中心点算法画圆和椭圆------------------------------------------------ 6图形变换的基本原理 ----------------------------------------------------- 8平移变换 ----------------------------------------------------------- 8 旋转变换 ---------------------------------------------------------- 8 比例变换 ---------------------------------------------------------- 9四、总体设计与功能实现 ------------------------------------------------------- 9 主要界面设计 ----------------------------------------------------------- 9设置颜色界面 ----------------------------------------------------------- 9界面设置代码 ------------------------------------------------------- 9 运行结果 ---------------------------------------------------------- 10二维线画图元实现 ------------------------------------------------------ 10画多边形功能的实现 --------------------------------------------------- 14画Bezier曲线功能的实现----------------------------------------------- 15

计算机图形学实验报告 课程设计 大作业

安徽建筑工业学院 计算机图形学实验报告 院(系)名称: 专业: 班级: 姓名: 学号: 指导老师:

实验一实现任意直线的中点画线算法 【实验目的】 掌握直线的中点画线算法; 【实验环境】 VC++6.0 【实验内容】 利用任意的一个实验环境,编制源程序,实现直线的中点画线法。 【实验原理】 假定直线斜率k在0~1之间,当前象素点为(x p,y p),则下一个象素点有两种可选择点P1(x p+1,y p)或P2(x p+1,y p+1)。若P1与P2的中点(x p+1,y p+0.5)称为M,Q为理想直线与x=x p+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点。这就是中点画线法的基本原理。 图2.1.2 中点画线法每步迭代涉及的象素和中点示意图 下面讨论中点画线法的实现。过点(x0,y0)、(x1, y1)的直线段L的方程式为F(x, y)=ax+by+c=0,其中,a=y0-y1, b=x1-x0, c=x0y1-x1y0,欲判断中点M在Q点的上方还是下方,只要把M代入F(x,y),并判断它的符号即可。为此,我们构造判别式: d=F(M)=F(x p+1, y p+0.5)=a(x p+1)+b(y p+0.5)+c

当d<0时,M在L(Q点)下方,取P2为下一个象素; 当d>0时,M在L(Q点)上方,取P1为下一个象素; 当d=0时,选P1或P2均可,约定取P1为下一个象素; 注意到d是x p, y p的线性函数,可采用增量计算,提高运算效率。 若当前象素处于d 0情况,则取正右方象素P1(x p+1, y p),要判下一个象素位置,应计 算d1=F(x p+2, y p+0.5)=a(x p+2)+b(y p+0.5)=d+a,增量为a。 若d<0时,则取右上方象素P2(x p+1, y p+1)。要判断再下一象素,则要计算d2= F(x p+2, y p+1.5)=a(x p+2)+b(y p+1.5)+c=d+a+b ,增量为a+b。画线从(x0, y0)开始,d的初值d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b,因F(x0, y0)=0,所以d0=a+0.5b。 由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值包含小数。因此,我们可以用2d代替d来摆脱小数,写出仅包含整数运算的算法程序。 【实验程序】 void Midpoint Line (int x0,int y0,int x1, int y1,int color) { int a, b, d1, d2, d, x, y; a=y0-y1; b=x1-x0;d=2*a+b; d1=2*a;d2=2* (a+b); x=x0;y=y0; drawpixel(x, y, color); while (x

计算机图形学 多边形裁剪与填充 计算机图形学课程设计

课程设计报告 课程名称计算机图形学 课题名称多边形裁剪与填充 专业计算机科学与技术 班级计算机0902 学号 姓名 指导教师刘长松曹燚 2012年10 月9 日

湖南工程学院 课程设计任务书 课程名称计算机图形学课题多边形裁剪与填充 专业班级计算机0902 学生姓名 学号 指导老师刘长松曹燚 审批 任务书下达日期2012年9月15 日 任务完成日期2012 年10月9 日

一、设计内容与设计要求 1.设计内容: 交互式地实现多边形的裁剪和填充。。 2.设计要求: 1)窗口功能设计。 2)实现鼠标画多边形与数据存储功能。 3)实现鼠标剪裁窗口选择功能。 4)实现多边形裁剪和填充功能。 3.算法提示: 多边形裁剪算法分析: 基本思想是一次用窗口的一条边裁剪多边形,窗口的一条边以及延长线构成裁剪线,该线把平面分成两个部分:可见一侧,不可见一侧。用一条裁剪边对多边形进行裁剪,得到一个顶点序列,作为下一条裁剪边处理过程的输入点。 对于每一条裁剪边,只是判断点在窗口的哪一测以及求线段与裁剪边的交点算法应随之改变。 多边形填充算法分析: 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin 和ymax),从y=ymin 到 y=ymax, 每次用一条扫描进行填充。对一条扫描线填充的过程可分为四个步骤: a.求交b.排序c.交点配对d.区间填色。 二、进度安排 第 3 周星期一8:00——12:00 星期二8:00——12:00 星期三8:00——12:00 星期四8:00——12:00 星期五8:00——12:00 第 4 周星期一8:00——12:00 附: 课程设计报告装订顺序:封面、任务书、目录、正文、附件(A4大小的图纸及程序清单)、评分。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。 正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。 正文总字数要求在5000字以上(不含程序原代码)。

相关文档
最新文档