计算机图形学实习报告

合集下载

计算机图形学实验报告4

计算机图形学实验报告4

计算机图形学实验报告4一、实验目的本次计算机图形学实验旨在深入了解和掌握计算机图形学中的一些关键概念和技术,通过实际操作和编程实现,提高对图形生成、变换、渲染等方面的理解和应用能力。

二、实验环境本次实验使用的软件环境为_____,编程语言为_____,硬件环境为_____。

三、实验内容1、二维图形的绘制使用基本的绘图函数,如直线、矩形、圆形等,绘制简单的二维图形。

通过设置线条颜色、填充颜色等属性,增强图形的表现力。

2、图形的几何变换实现图形的平移、旋转和缩放操作。

观察不同变换参数对图形的影响。

3、三维图形的生成构建简单的三维模型,如立方体、球体等。

应用光照和材质效果,使三维图形更加逼真。

四、实验步骤1、二维图形的绘制首先,在编程环境中导入所需的图形库和相关模块。

然后,定义绘图窗口的大小和坐标范围。

接下来,使用绘图函数按照指定的坐标和参数绘制直线、矩形和圆形。

最后,设置图形的颜色和填充属性,使图形更加美观。

2、图形的几何变换对于平移操作,通过修改图形顶点的坐标值来实现水平和垂直方向的移动。

对于旋转操作,根据旋转角度计算新的顶点坐标,实现图形的绕中心点旋转。

对于缩放操作,将图形的顶点坐标乘以缩放因子,达到放大或缩小图形的效果。

3、三维图形的生成首先,定义三维模型的顶点坐标和三角形面的连接关系。

然后,设置光照的位置、颜色和强度等参数。

接着,为模型添加材质属性,如颜色、反射率等。

最后,使用渲染函数将三维模型显示在屏幕上。

五、实验结果与分析1、二维图形的绘制成功绘制出了各种简单的二维图形,并且通过颜色和填充的设置,使图形具有了更好的视觉效果。

例如,绘制的矩形和圆形边缘清晰,颜色鲜艳,填充均匀。

2、图形的几何变换平移、旋转和缩放操作都能够准确地实现,并且变换效果符合预期。

在旋转操作中,发现旋转角度的正负会影响旋转的方向,而缩放因子的大小直接决定了图形的缩放程度。

3、三维图形的生成生成的三维模型具有一定的立体感和真实感。

计算机图形学课程综合实习实习报告

计算机图形学课程综合实习实习报告

计算机图形学课程综合实习实习报告1.实习目的(1)熟练掌握计算机图形学的基本原理和方法。

(2)熟练掌握计算机图形学的算法的程序实现,增强理论联系实际的能力(3)学习和掌握图形系统的设计和开发方法。

(4)学习使用VC++编写计算机图形学基础程序。

2.实习内容2.1程序结构说明2.1.1新建类的说明根据实习要求,对于二维算法的实现主要涉及到的图形有直线、圆形和多边形,因此新建三个类Cline,CCircle和CPolygon,其成员变量分别记录生成图形的参数,包括图形的几何参数(比如直线的端点坐标,圆的圆心坐标和半径)和图形显示效果的一些参数,比如线宽,使用何种方法绘制有一定线宽的直线,线的颜色等,类的成员函数主要作用是用于生成图形(主要是构建函数)、绘制图形(使用图形生成算法而不使用VC++自带的一些图形生成函数)和执行图形编辑操作。

同时由于添加一个对话框资源用于设置线宽和绘制时处理方法的一个对话框,生成对应的对话框处理类CSetWidthDialog,它从CDialog继承来,并添加相应的处理函数用于获得控件中相应的数据。

另外在裁剪时为了使程序的操作性更强,需要有一个临时的裁剪框,而使用MFC的函数或者是我已经写好的程序都没有办法达到理想的效果,因此我又添加一个新的类,叫做CCutRect专门用于处理图形裁剪时的操作。

2.1.2图形信息存储在文档类中添加三个动态文档类数组分别用于存储直线对象,圆对象和多边形对象,同时添加相应的函数,用于向数组中添加新的对象、获得数组长度和获得指定位置的对象,数组声明如下在绘制图形时,每绘制一个图形,就像相应的数组中添加相应的对象,在程序视图刷新时,输出所有图形。

2.1.3图形显示的优化如果在绘制图形及进行图形填充等操作时,直接在屏幕上输出结果,会因为整个I/O 操作拖慢程序的运行效率,具体反映就是图形填充操作时能够明显看出从上到下、逐行输出地过程,而在刷新视图时也可以看到类似的过程,在极端条件下(比如待填充区域很大或是非常复杂)会由于I/O操作不断刷新视图,导致程序永远进行填充,进入死循环。

计算机图形学实习报告

计算机图形学实习报告

实习报告实习名称:计算机图形学实习班级:学号:姓名:实习地点:实习指导教师:实习时间:年月日至月日一、实习目的与意义本次计算机图形学的实习分两部分,一部分是利用AutoCAD进行二维和三维模型的制作,另一部分是利用VC6.0进行编程实现对图形的简单操作。

通过对AutoCAD的实习,熟悉该软件的基本功能及操作特点,掌握二维及三维图形的基本制作过程。

通过对VC6.0的编程实习,理解图形的生成、图形的变换、图形的显示以及二维裁剪的基本思想,熟练掌握计算机图形学的基本原理和方法;熟练掌握计算机图形学算法的实现算法;学习和掌握图形系统的设计;学习用VC++编写计算机图形学程序;建立面向对象编程的基本概念。

二、实习主要内容1、AutoCAD软件操作(1)简单图形绘制(2)图形的基本编辑命令操作(3)标注文字及填充(4)三维图形绘制2.基于VC6.0下的计算机图形学程序编写(1)图形的生成:画直线、画圆、画曲线、画字符(2)图形的变换:平移、旋转、缩放、对称变换(3)图形的显示:扫描线填充、边缘填充、种子填充(4)图形的二维裁剪:CS裁剪、多边形裁剪、梁友栋裁剪、圆裁剪、中点分割法三、实习的主要过程第一部分 AutoCAD软件操作AutoCAD软件可以处理很多问题,在机械制图,土木建筑等方面有着广泛的应用,我们在机房打开AutoCAD软件对其进行系统配置,然后进行具体操作。

通过配置可以实现工具栏之类的快捷运用。

(1)简单图形绘制实习开始的第一天,在老师的讲解以及演示下,我们了解了AutoCAD软件的基本使用方法,与此同时,我们跟着老师的操作也逐渐熟悉了该软件的一些基本操作方法。

从设置基本绘图环境开始,按照指导书上的指示,采用边完成简单图形边学习各种命令的方式,逐渐熟练掌握了AutoCAD的使用,熟练掌握了其基本绘图功能,如掌握了绘图命令POINT、LINE、CIRCLE、ARC、DONUT、RECTANGLE、POLYLINE的功能及操作;掌握了实体绘图命令键盘输入的方法;掌握了缩放命令(ZOOM)的使用方法等。

《计算机图形学》实验报告

《计算机图形学》实验报告

《计算机图形学》实验报告目录1实验2:直线的生成 (1)1.1实验要求和目的 (1)1.2实验课时 (1)1.3实验环境 (1)1.4实验内容 (1)1.5核心代码 (3)1.6实验结果 (7)1.6.1DDA算法 (10)1.6.2Mid-Bresenham算法 (11)1.7心得与体会 (12)2实验4:BSpline曲线绘制 (13)2.1实验要求和目的 (13)2.2实验课时 (13)2.3实验环境 (13)2.4实验内容 (13)2.5核心代码 (16)2.6实验结果 (18)2.6.1B-样条算法 (19)2.6.2Bezeir算法 (22)2.7心得与体会 (24)附录 (25)BSpline曲线控制点的测试数据 (25)数据1 (25)数据2 (27)数据3 (29)数据4 (30)数据5 (31)数据6 (33)数据7 (36)数据8 (38)1实验2:直线的生成1.1实验要求和目的理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力;编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。

1.2实验课时3学时1.3实验环境本试验提供自带实验平台·开发环境:Visual C++ 6.0·实验平台:Free_Curve(自制平台)1.4实验内容本实验提供名为 Experiment_Frame_One的平台,该平台提供基本绘制、设置、输入功能,学生在此基础上实现·平台界面:如图1.4.1所示·设置:通过view->setting菜单进入,如图1.4.2所示·输入:通过view->input…菜单进入,如图1.4.3所示·实现算法:▪DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1)▪Mid_Bresenham算法:voidCExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)图 1.4.1 总界面图 1.4.2 设置界面图 1.4.3 输入界面1.5核心代码本次实验的核心代码如下所示。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告
在计算机图形学课程中,实验是不可或缺的一部分。

通过实验,我们可以更好地理解课程中所学的知识,并且在实践中掌握这些
知识。

在本次实验中,我学习了如何使用OpenGL绘制三维图形,并了解了一些基本的图形变换和视图变换。

首先,我们需要通过OpenGL的基本命令来绘制基本图形,例
如线段、矩形、圆等。

这些基本的绘制命令需要首先设置OpenGL 的状态,例如绘制颜色、线段宽度等,才能正确地绘制出所需的
图形。

然后,在实验中我们学习了图形的变换。

变换是指通过一定的
规则将图形的形状、位置、大小等进行改变。

我们可以通过平移、旋转、缩放等变换来改变图形。

变换需要按照一定的顺序进行,
例如先进行旋转再进行平移等。

在OpenGL中,我们可以通过设
置变换矩阵来完成图形的变换。

变换矩阵包含了平移、旋转、缩
放等信息,通过矩阵乘法可以完成图形的复合变换。

最后,视图变换是指将三维场景中的图形投影到二维平面上,
成为我们所见到的图形。

在实验中,我们学习了透视投影和正交
投影两种方式。

透视投影是指将场景中的图形按照视点不同而产
生不同的远近缩放,使得图形呈现出三维感。

而正交投影则是简单地将场景中的图形按照平行投影的方式呈现在屏幕上。

在OpenGL中,我们可以通过设置视图矩阵和投影矩阵来完成视图变换。

通过本次实验,我对于计算机图形学有了更深入的了解,并掌握了一些基本的图形绘制和变换知识。

在今后的学习中,我将继续学习更高级的图形绘制技术,并应用于实际的项目中。

计算机图形学第五次实验报告

计算机图形学第五次实验报告

《计算机图形学》实验报告实验十一真实感图形一、实验教学目标与基本要求初步实现真实感图形, 并实践图形的造型与变换等。

二、理论基础运用几何造型, 几何、投影及透视变换、真实感图形效果(消隐、纹理、光照等)有关知识实现。

1.用给定地形高程数据绘制出地形图;2.绘制一(套)房间,参数自定。

三. 算法设计与分析真实感图形绘制过程中, 由于投影变换失去了深度信息, 往往导致图形的二义性。

要消除这类二义性, 就必须在绘制时消除被遮挡的不可见的线或面, 习惯上称之为消除隐藏线和隐藏面, 或简称为消隐, 经过消隐得到的投影图称为物体的真实图形。

消隐处理是计算机绘图中一个引人注目的问题, 目前已提出多种算法, 基本上可以分为两大类:即物体空间方法和图象空间方法。

物体空间方法是通过比较物体和物体的相对关系来决定可见与不可见的;而图象空间方法则是根据在图象象素点上各投影点之间的关系来确定可见与否的。

用这两类方法就可以消除凸型模型、凹形模型和多个模型同时存在时的隐藏面。

1).消隐算法的实现1.物体空间的消隐算法物体空间法是在三维坐标系中, 通过分析物体模型间的几何关系, 如物体的几何位置、与观察点的相对位置等, 来进行隐藏面判断的消隐算法。

世界坐标系是描述物体的原始坐标系, 物体的世界坐标描述了物体的基本形状。

为了更好地观察和描述物体, 经常需要对其世界坐标进行平移和旋转, 而得到物体的观察坐标。

物体的观察坐标能得到描述物体的更好视角, 所以物体空间法通常都是在观察坐标系中进行的。

观察坐标系的原点一般即是观察点。

物体空间法消隐包括两个基本步骤, 即三维坐标变换和选取适当的隐藏面判断算法。

选择合适的观察坐标系不但可以更好地描述物体, 而且可以大大简化和降低消隐算法的运算。

因此, 利用物体空间法进行消隐的第一步往往是将物体所处的坐标系转换为适当的观察坐标系。

这需要对物体进行三维旋转和平移变换。

常用的物体空间消隐算法包括平面公式法、径向预排序法、径向排序法、隔离平面法、深度排序法、光线投射法和区域子分法。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验二维填充图的生成1. 图元填充利用多种图元填充的方法绘制一面五星红旗。

方法有: 扫描转换多边形的逐点判断法(编码算法), 扫描线算法, 区域填充的扫描线算法, 自创的向内复制边法。

1.1说明:1.1.1 宏定义和类型定义:#define max 400#define pi 3.14159265#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define false 0#define true 1#define ok 1#define error 0#define infeasible -1#define overflow -2typedef int Status;typedef int bool;typedef struct {int y,xLeft,xRight;}SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;typedef struct Edge{int ymax;float x,deltax;struct Edge *nextEdge;}Edge;Edge *EL[max];typedef struct{float x,y;}point;Status SetStackEmpty(SqStack *s){s->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!s->base) return overflow;s->top=s->base;s->stacksize=STACK_INIT_SIZE;return ok;}Status PushStack(SqStack *s,SElemType e){if(s->top-s->base>=s->stacksize){s->base=(SElemType*)(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElemType));if(!s->base) return error;s->top=s->base+s->stacksize;s->stacksize+=STACKINCREMENT;}*s->top++=e;return ok;}Status PopStack(SqStack *s,SElemType *e){ if(s->top==s->base) return error;*e=*(--s->top);return ok;}Status IsStackEmpty(SqStack *s){if(s->base==s->top) return true;else return false;}1.1.2其他由于要填充五角星, 我们就要得到五角星的十个顶点。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告
实验目的:通过本次实验,深入了解并掌握计算机图形学的基本原理和相关技术,培养对图形处理的理解和能力。

实验内容:
1. 图像的基本属性
- 图像的本质及表示方法
- 像素和分辨率的概念
- 灰度图像和彩色图像的区别
2. 图像的处理技术
- 图像的采集和处理
- 图像的变换和增强
- 图像的压缩和存储
3. 计算机图形学的应用
- 图像处理在生活中的应用
- 计算机辅助设计中的图形学应用
- 三维建模和渲染技术
实验步骤和结果:
1. 在计算机图形学实验平台上加载一张测试图像,分析其像素构成
和基本属性。

2. 运用图像处理技术,对测试图像进行模糊、锐化、色彩调整等操作,观察处理后的效果并记录。

3. 学习并掌握计算机图形学中常用的处理算法,如卷积、滤波等,
尝试应用到测试图像上并进行实验验证。

4. 探讨计算机图形学在数字媒体制作、虚拟现实、计算机辅助设计
等领域的应用案例,并总结其在实践中的重要性和价值。

结论:
通过本次实验,我对计算机图形学有了更深入的了解,掌握了图像
处理技术的基本原理和应用方法。

计算机图形学作为一门重要的学科,对多个领域有着广泛的应用前景,有助于提高数字媒体技术、虚拟现
实技术等领域的发展水平。

希望在未来的学习和工作中能进一步深化
对计算机图形学理论和实践的研究,不断提升自己在这一领域的专业
能力和创新意识。

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

实习报告实习名称:计算机图形学实习班级:学号:姓名:实习地点:实习指导教师:实习时间:年月日至月日一、实习目的与意义本次计算机图形学的实习分两部分,一部分是利用AutoCAD进行二维和三维模型的制作,另一部分是利用VC6.0进行编程实现对图形的简单操作。

通过对AutoCAD的实习,熟悉该软件的基本功能及操作特点,掌握二维及三维图形的基本制作过程。

通过对VC6.0的编程实习,理解图形的生成、图形的变换、图形的显示以及二维裁剪的基本思想,熟练掌握计算机图形学的基本原理和方法;熟练掌握计算机图形学算法的实现算法;学习和掌握图形系统的设计;学习用VC++编写计算机图形学程序;建立面向对象编程的基本概念。

二、实习主要内容1、AutoCAD软件操作(1)简单图形绘制(2)图形的基本编辑命令操作(3)标注文字及填充(4)三维图形绘制2.基于VC6.0下的计算机图形学程序编写(1)图形的生成:画直线、画圆、画曲线、画字符(2)图形的变换:平移、旋转、缩放、对称变换(3)图形的显示:扫描线填充、边缘填充、种子填充(4)图形的二维裁剪:CS裁剪、多边形裁剪、梁友栋裁剪、圆裁剪、中点分割法三、实习的主要过程第一部分 AutoCAD软件操作AutoCAD软件可以处理很多问题,在机械制图,土木建筑等方面有着广泛的应用,我们在机房打开AutoCAD软件对其进行系统配置,然后进行具体操作。

通过配置可以实现工具栏之类的快捷运用。

(1)简单图形绘制实习开始的第一天,在老师的讲解以及演示下,我们了解了AutoCAD软件的基本使用方法,与此同时,我们跟着老师的操作也逐渐熟悉了该软件的一些基本操作方法。

从设置基本绘图环境开始,按照指导书上的指示,采用边完成简单图形边学习各种命令的方式,逐渐熟练掌握了AutoCAD的使用,熟练掌握了其基本绘图功能,如掌握了绘图命令POINT、LINE、CIRCLE、ARC、DONUT、RECTANGLE、POLYLINE的功能及操作;掌握了实体绘图命令键盘输入的方法;掌握了缩放命令(ZOOM)的使用方法等。

由于指导书的例子有详尽的操作过程,所以对以上功能的使用方法的掌握比较快。

通过完成例子掌握了他们的使用方法,接着完成其他的练习达到了巩固的目的。

以下通过一些例子来说明对以上绘图功能的使用:例一:基本环境设置a:在命令中输入limits,确定相应的绘图区域大小b:在命令中输入zoom,选择A(全部),让画布全部充满屏幕。

c:下来进行基本的画图操作,比如line、pline、point、circle、polygon 等,掌握了这些基本的画图操作。

例二:通过pline直接实现对轮廓的绘制,circle实现对圆的绘制,绘制前仍需设置图幅大小。

对于轴对称的图形我们可以只绘出图形的一半,然后通过mirror镜像操作实现。

再绘制的过程中,我们可以采用相对坐标和极坐标来实现简单定位,避免了计算的麻烦。

绘制以上的图形时,可以采用pline绘制出外围轮廓,然后再绘制两个圆的方法,也可以采用镜像的方法来实现,从而节省时间。

例三:绘制五角星时采用采用端点捕捉画线的方法,采用solid填充区域。

例四:通过辅助线实现图形的简单绘制。

通过以下的图形操作巩固并熟练了图形的简单绘制的方法。

(2)图形的基本编辑命令操作我们在绘制复杂图形的时候需要采用一些基本编辑命令操作,如复制、对称、旋转、剪切、圆的公切线、公切圆等操作,能过快速的绘制出图形。

对于复杂的图形,还需要我们能敏锐的发现图形各部分间的相关关系,才能快速而准确的绘制出图形,这就要求我们要多练习,熟练掌握基本操作,才能快速绘制比较复杂的图形。

在图形的编辑栏中有删除、复制、镜像(MIRROR)、偏移、阵列、旋转、修剪等操作,我们可以通过这些操作,来绘制复杂图形。

例一:镜像操作、倒角处理绘制以上图形时,先用pline绘制出上半部分的轮廓线,接着对左右两端进行倒角处理,并补竖线,然后通过mirror镜像操作绘制另一半图形。

最后绘制腰圆图形,通过复制,偏移等操作绘制出上图。

例二:通过circle操作,画出两个圆的公切圆,通过trim修剪得到以下图形例三:绘制以上图形时,需要先对图形进行研究,分析图上标注的含义,确定辅助线的位置,恢复被裁剪掉的图形方便绘制图形。

通过这幅图的练习,让我们明白绘制一些复杂图形时,往往无法直接绘制出来,需要我们通过研究图形找到辅助线才能快速又准确的绘制出图形。

通过以下的图形绘制更加熟练的学会了构造辅助线,通过图形基本编辑命令操作来实现复杂图形的绘制。

(3)标注文字及填充标注能够帮助我们检验所画图形是否符合标准,所以绘制后的图形还需要进行标注,在标注时,要建立不同的图层,在进行标注时,要根据实际不同的情况建立不同的标注样式,进行图形的标注。

以上的图形都进行了标注。

图形填充例子:以下两个图形综合了前面的知识,同时加入了图形的填充,图形的绘制过程比较复杂,且需要借助相应的辅助线进行绘图。

以下两个手柄图是对前面所学知识的汇总,需要熟练掌握基本图形绘制方法、编辑命令操作和辅助线的构建。

(4)三维图形绘制由于实习期间有较多科目的考试,三维图形的练习在CAD考核之前并没有做过,只是在考核的时候进行了三维图形的绘制,由于没有经过三维图形练习,对三维图形的绘制不熟悉,没能在规定时间内完成三维图形的绘制。

在进行编程实习期间,才将三维图形的绘制给补了回来。

第二部分基于VC6.0下的计算机图形学程序编写本次的编程实习采用面向对象编程,通过MFC来编程,实现可视化操作。

1.创建工程后,对菜单栏进行修改,用鼠标右键点击菜单中的空格,在出现的下拉菜单中点击最后一项“属性”,出现“Menu Item Properties”窗口;在窗口中“标题”栏输入“图形生成”,建立主菜单项“图形生成”,同理建立“图形变换”,“图形显示”“二维裁剪”的菜单项,并在其下拉选项中添加相应操作。

修改后的菜单如下图所示:2.鼠标坐标显示为了精确定点,必须知道当前坐标,因此必须为操作者提示鼠标坐标。

准备将坐标显示在应用程序窗口的右下脚。

在自动生成的工程中,窗口的右下脚处原是用来显示键盘按键信息的(如下左图所示),现改为显示鼠标坐标(如下右图所示)。

3.画直线、圆、曲线、字符、颜色设置(1)直线:分为DDA直线、中点直线下面以DDA直线为例,说明如何创建菜单响应函数。

已经创建了DDA直线菜单,菜单响应程序如下步骤:打开工程项目,依次点击菜单“查看”、“建立类向导”,出现如下窗口(如下图),也可以用Ctrl+W打开类向导。

在 Class Name:栏中选CMy2013302590035View(即菜单响应程序放在视图类中);在 Object Ids:栏中选 ID_DRAW_DDALINE;在 Messages:栏中选 COMMAND;点击 Add Function 按键,出现函数命名窗口,点击该窗口中的 OK 按键,该函数在2013302590035View.cpp 中生成。

点击该窗口中的 Edit Code 按键查看、编辑该函数。

具体实现:DDA直线的程序实现如下:首先编写菜单响应函数,对MenuID和PressNum 两个变量赋初值;接下来建立相应的鼠标响应程序框架,DDA直线要求第一次点鼠标左键确定起始点,第二次点鼠标左键确定直线终止点,并画出直线,中间利用橡皮筋技术实时显示直线的形状,完成直线绘画后,还要将橡皮筋旧线擦除。

中点画线算法实现过程和DDA算法大致相同,但是其思想更加合理,更有利于硬件实现,提高了算法效率,程序实现同DDA大同小异,只是DOC.cpp中核心算法不同而已,中点画线法采用交点与中点差比较得判定。

其算法的中心思想相同,即在坐标系的网格中,确定起始点后,再根据其不同的判断方法,取得离直线最近的像素点予以着色,用离散的点表示出所要直线。

上图中红线为DDA直线,黑线为中点直线(2)曲线:曲线分为Brezier曲线、B样条曲线和Hermite曲线。

均是由鼠标左键确定主要拐点,按右键确定选点已完成并进行曲线绘制,双击左键消除十字丝完成曲线绘制。

Bezier曲线是由一群控制点决定的。

一段曲线的次数与控制点的点数密切相关,人们常常使用三次曲线,那么一段曲线的控制点的点数为4。

实际应用中,一条Bezier曲线是由多段Bezier曲线首尾相连而成。

与之相应,一群控制点划分成多组控制点,每一组控制一段曲线的形状。

为了使每一段曲线平滑地连接起来,要求前一组最后一个控制点与后一组第一个控制点相同(即共用一个点),同时要求前一组倒数第二个控制点、最后一个控制点(即后一组第一个控制点)、后一组第二个控制点等三个控制点在一条直线上。

如果要求给出的控制点在相邻的组之间都能满足这种要求,那么控制点的布点工作将受到极大的限制。

这种要求不仅难以满足,而且灵活性被极大地削弱。

解决的办法是计算得出连接点,即用前一组的倒数第二点和后一组的第二点连线的中点作为相邻两段曲线控制点的终点和起点。

Bezier曲线的操作这样安排:用鼠标左键进行控制点选点,右键结束选控制点,显示一条Bezier曲线;再按左键选取一个控制点进行移动修改,右键结束一个控制点修改;当所有的修改完成以后,双击左键生成一条正式的Bezier 曲线。

因此首次布点和修改控制点位置,对鼠标的操作要求不同,必须区分开。

B样条曲线和Hemite曲线的操作安排与Bezier曲线的操作安排一致,只是DOC.cpp中的核心算法不同而已。

上图中,黑色为Bezier曲线,红色为B样条曲线,绿色为Hemite曲线(3)圆:圆分为Bresenham圆、正负法圆。

Bresenham圆的程序实现如下:由鼠标左键确定圆心,再定一点,使其与第一点的连线长度成为半径进行圆的绘制。

先为Bresenham 圆添加菜单响应函数确定MenuID,然后画圆的OnLButtonDown()响应:用鼠标确定圆心,再移动鼠标确定半径。

在确定半径时,随着鼠标的移动,一个圆随着鼠标的移动半径发生变化。

然后调用Bresanham 算法完成圆的绘制。

Bresenham圆的编程实现如下:首先编写菜单响应函数,对MenuID和PressNum两个变量赋初值;接下来建立相应的鼠标响应程序框架,Bresenham圆要求第一次点鼠标左键确定圆心,第二次点鼠标左键确定圆上一点,并由此确定半径,画出完整的圆;然后再在Doc.h头文件中声明必要变量和函数,并在Doc.cpp中完成Bresenham 圆的生成数。

正负画圆法的编程实现与Bresenham圆的相类似。

上图中红色为Bresenham圆,绿色为正负法画圆法(4)字符:字符的表示有点阵表示和矢量表示两种。

点阵表示指每个字符都有若干个点表示,矢量表示记录的是笔画信息。

相关文档
最新文档