实验指导书-计算机图形学
《计算机图形学》实验指导书《计算机图形学》实验指导书目录目录 (1)概述 (2)实验1 熟悉实验环境 (3)1.1 实验要求和目的 (3)1.2 实验课时 (3)实验2 直线的生成 (4)2.1 实验要求和目的 (4)2.2 实验课时 (4)2.3 实验环境 (4)2.4 实验平台简介: (4)2.5 思考题(选做) (5)实验3 多边形扫描转换算法 (7)3.1 实验要求和目的 (7)3.2 实验课时 (7)3.3 实验环境 (7)3.4 实验平台简介: (7)实验4 BSpline曲线绘制 (10)4.1 实验要求和目的 (10)4.2 实验课时 (10)4.3 实验环境 (10)4.4 实验平台介绍 (10)实验5 光照模型(Illumination Model) (13)5.1 实验要求和目的 (13)5.2 思考题 (13)5.3 实验课时 (13)5.4 实验环境 (13)5.5 实验平台介绍 (13)附录A:实验报告 (17)概述(1)实验概述运用某种程序设计语言设计并实现计算机图形学的直线、曲线、简单多面体(四面体)等基本图形元素的表示和绘制,以检验和巩固计算机图形学中的基本知识、加深对本课程原理、方法和技术的理解,锻炼和培养学生实际操作技能和解决实际问题的能力,使学生熟悉解决实际问题的过程。
(2)实验目的和要求实验目的是检验和巩固所学知识与方法,通过实现基本图形元的表示和绘制过程,理解并掌握计算机图形学的原理、方法和技术,并灵活运用它们解决实际问题。
要求理解各实验相关的原理和实现方法,通过这些实验的训练,加深对课程中原理、方法和技术的理解,验证和巩固计算机图形学中的基本知识,锻炼和培养学生熟悉图形编程环境,理解课程中基本问题的求解算法和性能改进方法,并对结果进行充分测试。
(3)主要原理与概念一般来说,计算机图形学的基本内容包括图形的表示(如三维形体的表示,曲线、曲面的表示等)、图形变换和观察、图形生成(基本图形生成,消隐、真实感绘制等)三个方面,涉及大量数据结构、算法。
本试验大纲主要涉及到多面体表示法、直线扫描生成、多边形填充、平行投影变换、消隐算法等概念和算法。
(4)实验环境Visual C++ 6.0(5)实验内容⏹实验一:实验环境介绍⏹实验二:直线生成算法⏹实验三:多边形扫描转换⏹实验四:自由曲线绘制⏹实验五:光照模型(Illumination)实验1熟悉实验环境实验1熟悉实验环境1.1实验要求和目的熟悉实验环境:熟悉Visual C++的图形编程环境;掌握Visual C++中GDI(图形设备接口)、画笔、画刷等基本概念;掌握基本绘图函数;1.2实验课时1学时实验2直线的生成2.1实验要求和目的理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力;编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。
2.2实验课时3学时2.3实验环境⏹开发环境:Visual C++ 6.0⏹实验平台:Experiment_Frame_One(自制平台)2.4实验平台简介:本实验提供名为 Experiment_Frame_One的平台,该平台提供基本绘制、设置、输入功能,学生在此基础上实现Mid_Bresenham 算法,并进行分析。
⏹平台界面:如图 2-1所示⏹设置:通过view->setting菜单进入,如图 2-2所示⏹输入:通过view->input…菜单进入.如图 2-3所示⏹实现算法:◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0,int Y0, int X1, int Y1)◆Mid_Bresenham算法:voidCExperiment_Frame_OneView::Mid_Bresenham(int X0, intY0, int X1, int Y1)2.5思考题(选做)如何测试比较算法的性能?⏹提示1:因为绘制1条直线时间很短,所以需要绘制大量直线才能比较它们之间的性能;⏹提示2: drawpixel需要耗费时间,但它的时间性能和直线绘制算法无关,因此在比较不同算法性能时,应该屏蔽它的影响,如何屏蔽?图2-1 总界面图2-2 设置界面图2-3 输入界面实验3多边形扫描转换算法3.1实验要求和目的理解多边形扫描转换的原理;掌握典型多边形扫描转换算法;掌握步处理、分析实验数据的能力;●编程实现基本X-扫描线转换算法(必做);●编程实现有效边表转换算法(选做)3.2实验课时4学时3.3实验环境本试验提供自带实验平台●开发环境:Visual C++ 6.0●实验平台:Polygon_Conversion(自制平台)3.4实验平台简介:本实验提供名为 Polygon_Conversion的平台,该平台提供基本绘制、设置、输入功能,学生在此基础上实现X-扫描线算法和有效边表转换算法。
●平台界面:如图 3-1所示●多边形输入,界面如图 3-2所示:⏹用户按【功能】→【输入多边形……】菜单开始输入多边形;⏹单击鼠标左键输入多边形顶点;⏹点击鼠标右键结束多边形输入,并将最后一个顶点和第一个顶点进行连接;●参数设置:界面如图 3-3所示⏹用户按“【功能】→【设置……】”启动设置对话框⏹设置内容:◆填充色◆是否填充多边形◆选择转换算法⏹实现扫描转换算法◆X-扫描线转换算法:void CPolygon_ConversionView::X_Scan_Line_Conersion(int Vertices[][2], int VertexNum)◆有效边表转换算法:void CPolygon_ConversionView::Active_Edge_Table_Conersion(int Vertices[][2], int VertexNum)图3-1实验平台界面图3-2 输入多边型图3-3 设置对话框实验4BSpline曲线绘制4.1实验要求和目的理解掌握自由曲线生成的基本原理和方法;编程实现三次B样条曲线:●均匀周期性B样条曲线●开放均匀B样条曲线4.2实验课时4学时4.3实验环境本试验提供自带实验平台●开发环境:Visual C++ 6.0●实验平台:Free_Curve(自制平台)4.4实验平台介绍本实验提供名为Free_Curve的平台,该平台提供基本绘制、设置、输入功能,学生在此基础上实现:[1]编码实现BSpline曲线基函数[2]编码实现不同参数条件下的节点矢量的生成●平台界面:如图 4-1所示●多边形输入,界面如图 4-1所示:⏹用户按【功能】→【输入……】菜单开始输入控制多边形;⏹单击鼠标左键输入多边形顶点;⏹点击鼠标右键结束控制多边形输入●参数设置:界面如图 4-2所示⏹用户按“【功能】→【设置……】”启动设置对话框⏹设置内容:◆控制点设置(包括颜色、是否显示、控制点大小)◆控制多边形设置(包括控制多边形的颜色,是否显示)◆BSpline曲线设置⏹实现下列函数◆实现BSpline曲线的基函数;float BKM(float t, int k, int m, float nodes[])参数含义参考代码注解;◆节点矢量的计算:bool Create_Nodes_Vector(int n,int m,int SplineType,float nodes[])参数含义参考代码注解;图4-1 平台界面图4-2 设置界面实验5光照模型(Illumination Model) 5.1实验要求和目的理解和掌握简单光照模型的基本原理和方法;并编程实现两种常用的明暗处理方法:●Gouraud明暗处理方法●Phong明暗处理方法说明:本平台目前仅考虑环境光(Ambient Light)、漫反射光(Diffuse light),暂不考虑镜面反射光(Specular Light ),而且不考虑光强衰减;5.2思考题●如何实现光强衰减效果●如何实现镜面反射光效果5.3实验课时4学时5.4实验环境本试验提供自带实验平台●开发环境:Visual C++ 6.0●实验平台:Illumination(自制平台)5.5实验平台介绍本实验提供名为Illuminatin的平台,该平台提供以下功能:[1]提供半球面的四边形网格生成功能;[2]网格线绘制功能[3]恒定光强的多边形绘制功能[4]设置功能(见后面的描述)[5]提供完整的多边形绘制框架;[6]提供二次线性插值运算功能在此基础上,学生编程实现:[1]编码实现Gouraud明暗处理方法[2]编码实现Phong明暗处理方法●平台界面:如图5-1所示●多边形输入,界面如图5-1所示:⏹用户按【功能】→【输入……】菜单开始输入控制多边形;⏹单击鼠标左键输入多边形顶点;⏹点击鼠标右键结束控制多边形输入●参数设置:界面如图5-2所示⏹用户按“【功能】→【设置……】”启动设置对话框⏹设置内容:◆几何模型参数◆网格线设置◆环境光设置◆漫反射设置◆显示控制⏹实现下列函数◆实现Gouraud明暗处理方法;double CIlluminationView::Gouraud(int Pt[3],int Vertices[4][3],double Normals[4][3],int lightPos[3],double Ip,double Kd)参数含义参考代码注解;实现Phong明暗处理方法:bool Create_Nodes_Vector(int n,int m,int SplineType,float nodes[]) 参数含义参考代码注解;图5-1 总体界面图5-2 设置对话框附录A:实验报告实验X:实验名称姓名:学号:班级:实验地点:实验时间:1实验目的和要求2实验环境和工具3实验结果3.1程序流程图3.2程序代码3.3运行结果3.4运行结果分析4思考题(可选)5实验心得。
《计算机图形学》上机实验指导1
KMUSTTeaching Records昆明理工大学《上机实验指导书》课程名称:计算机图形学所在系(部):国资院测绘系学年学期: 2012 — 2013 学年第 2 学期授课专业班级:地信101/土管101/测绘101 班级人数: 27/24/56 讲授教师:李向新教材名称:计算机图形学课程总学时: 64 ;总学分:理论学时: 38 ;实验(或实践)学时: 上机学时: 32 ;辅导(或答疑)学时: 系主任签章:第1部分计算机图形学上机实验大纲1.1 目的与任务计算机图形学上机是计算机图形学课程的组成部分之一,是掌握计算机图形学课程内容的一个重要实践环节。
通过上机实验,一方面可以让学生巩固课堂所学的计算机图形学基础理论,另一方面能让学生掌握基本的OpenGL的编程方法及技能,掌握使用OpenGL绘制基本图形,进行2D及3D维图形变换,生成曲线曲面及构建具有真实感的3D场景。
1.2 基本要求1. 了解OpenGL在计算机图形学中的应用基础知识。
2. 掌握基本的OpenGL的编程方法及技能。
3. 学会使用OpenGL绘制基本图形。
4. 学会使用OpenGL进行2D及3D维图形变换、生成曲线曲面及构建具有真实感的3D场景。
1.3 内容及学时安排上机1:glut工具包的安装及使用 2学时上机2:OpenGL编程练习 2学时上机3:OpenGL中基本几何图形的绘制 2学时上机4:二维图形变换编程练习 2学时上机5:交互式绘图技术编程练习 2学时上机6:三维图形变换编程练习 2学时上机7:OpenGL三维物体表示编程练习 2学时上机8:真实感图形的生成与处理上机 2学时合计 16学时1.4 教学参考书(1) 成思源等编著:计算机图形学,冶金工业出版社,2003.(2) (美)安杰尔(Edward Angel)著;李桂琼,张文祥译: OpenGL程序设计指南(第二版),北京:清华大学出版社,2005.(3) Edward Angel: Interactive Computer Graphics—A Top-Down Approach withOpenGL, Third Edition, Pearson Education, Inc., 2003.(4) F.S. Hill, JR:Computer Graphics Using OpenGL Second Edition, PearsonEducation, Inc., 2003.(5) James D. Foley et al.: Computer Graphics—Principles and Practice, SecondEdition in C, Pearson Education, Inc., 2002.(6) 朱家义:Visual C++程序设计,机械工业出版社,2003。
计算机图形学试验指导一–OpenGL基础
//处理键盘
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 27://esc键退出
exit(0);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);//初始化glut
为了使用OpenGL,我们需要在项目中加入相关的Lib文件:glut32.lib
选中菜单Project->Settings项,在link选项卡中的Object/Library modules栏中加入glut32.lib。
选择菜单File中的New选项,弹出一个分页的对话框,选中页Files中的C++sourcefile,填入文件名,钩选添加到刚才建的那个工程里,然后就可以开始编程了。
init();//初始化OpenGL
glutDisplayFunc(display);//设置显示回调函数
glutReshapeFunc(reshape);//设置reshape回调函数
glutKeyboardFunc(keyboard);//设置键盘回调函数
glutMainLoop();//进入主循环
{
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存
glBegin(GL_LINES);//开始画直线
glColor3f(1.0f, 1.0f, 1.0f);//设置颜色为白色
glVertex2f(30.0f, 30.0f);//第一根线的两个端点
计算机图形学上机实验指导
计算机图形学上机实验指导指导教师:张加万老师助教:张怡2009-10-10目录1.计算机图形学实验(一) – OPENGL基础 ..................................... - 1 -1.1综述 (1)1.2在VC中新建项目 (1)1.3一个O PEN GL的例子及说明 (1)2.计算机图形学实验(二) – OPENGL变换 ..................................... - 5 -2.1变换 (5)3.计算机图形学实验(三) - 画线、画圆算法的实现....................... - 9 -3.1MFC简介 (9)3.2VC6的界面 (10)3.3示例的说明 (11)4.计算机图形学实验(四)- 高级OPENGL实验...................... - 14 -4.1光照效果 (14)4.2雾化处理 (16)5.计算机图形学实验(五)- 高级OPENGL实验........................ - 20 -5.1纹理映射 (20)5.2反走样 (24)6.计算机图形学实验(六) – OPENGL IN MS-WINDOWS .......... - 27 -6.1 实验目标: (27)6.2分形 (28)1.计算机图形学实验(一) – OpenGL基础1.1综述这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL提供了完备的支持。
OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。
本次实验不涉及面向对象编程,不涉及MFC。
1.2在VC中新建项目1.2.1新建一个项目选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。
计算机图形学与图像处理作业指导书
计算机图形学与图像处理作业指导书第一章计算机图形学基础 (2)1.1 图形学概述 (2)1.2 图形系统组成 (2)1.3 图形学基本概念 (3)第二章图形数据结构 (4)2.1 线条与曲线表示 (4)2.2 图形数据存储方法 (4)2.3 图形数据结构设计 (5)第三章二维图形处理 (5)3.1 线条算法 (5)3.1.1 DDA算法 (5)3.1.2 Bresenham算法 (5)3.1.3 中点Bresenham算法 (6)3.1.4 抗锯齿技术 (6)3.2 填充算法 (6)3.2.1 扫描线填充算法 (6)3.2.2 边缘填充算法 (6)3.2.3 区域填充算法 (6)3.3 几何变换 (6)3.3.1 平移变换 (6)3.3.2 缩放变换 (6)3.3.3 旋转变换 (7)3.3.4 对称变换 (7)3.3.5 错切变换 (7)3.3.6 组合变换 (7)第四章三维图形处理 (7)4.1 三维模型表示 (7)4.2 三维图形变换 (7)4.3 三维图形投影 (8)第五章图像处理基础 (8)5.1 图像基本概念 (8)5.2 图像处理方法 (9)5.3 图像处理软件 (9)第六章图像增强 (10)6.1 对比度增强 (10)6.1.1 概述 (10)6.1.2 线性对比度增强 (10)6.1.3 非线性对比度增强 (10)6.2 亮度调整 (10)6.2.1 概述 (10)6.2.2 线性亮度调整 (10)6.2.3 非线性亮度调整 (11)6.3 锐化处理 (11)6.3.1 概述 (11)6.3.2 空间域锐化 (11)6.3.3 频率域锐化 (11)第七章图像复原 (11)7.1 噪声消除 (12)7.2 退化模型 (12)7.3 逆滤波 (12)第八章图像分割 (13)8.1 阈值分割 (13)8.2 区域分割 (13)8.3 水平集方法 (13)第九章图像识别与分类 (14)9.1 特征提取 (14)9.2 识别算法 (14)9.3 分类方法 (15)第十章计算机视觉 (15)10.1 视觉感知基础 (15)10.1.1 生理基础 (15)10.1.2 心理基础 (16)10.2 机器视觉系统 (16)10.2.1 图像获取 (16)10.2.2 图像处理 (16)10.2.3 图像理解 (16)10.3 视觉应用案例 (16)第一章计算机图形学基础1.1 图形学概述图形学(Computer Graphics)是计算机科学的一个重要分支,主要研究如何利用计算机技术、处理和显示图形信息。
计算机图形学上机指导——金刚石图案算法实现说明(MFC)
金刚石图案算法实现说明1、设计要求:总体需求:将半径为r的圆周n等分,用直线将各等分点作隔点相连,形成的图案称为“金刚石”图案。
具体要求:1、在MFC环境中建立一个由“文件”、“绘图”和“帮助”这3个菜单项组成的菜单。
“文件”的子菜单为“退出”;“绘图”的子菜单为“Diamond”;“帮组”的子菜单为“关于”。
2、定义一个输入对话框类,提供两个参数的输入界面。
3、在客户区显示金刚石图案。
实现效果图如图1-1所示:图1-1 输入对话框及效果图2、具体步骤:1、点的设计1)类视图“ClassV iew”里选中TestClasses后右击,选择“New Class”,打开“New Class”对话框。
2)在“Class type”中选择“Generic Class”,并在“Name”中输入类名“P2D”,然后单击“Ok”。
(到此,在文件视图的“source file”下VC向导自动添加了“P2D.h”和“P2D.cpp”)3)打开“P2D.h”,作类的初始化定义:添加两个公有数据成员x,y,数据类型均为doulbe。
(思考:为什么要设为公有数据成员?)4)完成P2D类的定义。
2、对话框的设计1)在资源视图“Resource View”中选择“Dialog”,并右击,选择“Insert Dialog”。
2)在新建对话框内添加静态文本(static text)和编辑框(Edit Box)控件。
3)属性打开(Alt+Enter)。
Edit1控件的ID为IDC_EDIT1,并设置取值范围:5~50;Edit1控件的ID为IDC_EDIT2,并设置取值范围:200~500;4)双击对话框弹出“Adding a Class”对话框,保持默认值,添加一个新类“Create a new class”,单击“Ok”。
5)在弹出的“New class”对话框中填写对话框类名“InputDlg”,单击“Ok”。
(基类是MFC中的CDialog)6)对话框的设计。
计算机绘图认证实训指导书
《建筑CAD》实验指导书一、基本要求要求学生比较系统地理解AutoCAD 2006的功能和在设计中的应用技术,掌握其使用的基本命令、基本方法,要求学生具有将专业设计需求与软件功能有机结合的能力,要求学生达到综合运用所学的知识、方法,提高本专业设计应用与开发能力。
二、基本实验内容实验一计算机绘图基本操作一、实验目的1、了解安装AutoCAD 2006系统所需的硬件配置和软件环境,练习AutoCAD软件的启动和退出。
2、熟悉AutoCAD 2006的基本术语与现有知识的关联和用户界面,练习AutoCAD命令的输入方式,全面了解菜单结构和使用方法。
熟悉菜单的使用,如面向对象的快捷菜单、下拉菜单、工具条等。
3、理解和使用基本的图形样板,创建自己的样板文件。
4、熟悉在线帮助和实时助手的使用。
5、掌握在绝对坐标、相对坐标、极坐标下的坐标输入方法,直接距离输入法。
6、练习直线(line)、圆(circle)命令的操作。
二、实验内容1、AutoCAD界面介绍、菜单条、主工具条、工具条的显隐、绘图区、状态栏、命令行、视图操作、 AutoCAD坐标、系统、 AutoCAD命令执行方式、对象的选择和删除、状态行:各按钮的用法。
2、设置绘图环境,分别创建A0—A4图纸的样板文件。
绘制下列图形。
实验二图层的设定一、实验目的1、创建和管理图层以及其它对象特性。
2、掌握设置对象的特性,如图层、颜色、线型和线宽及用对象特性管理器修改对象的特性,以及对象特性在设计数据表达中的作用。
3、掌握AutoCAD 2006中精确绘图的技巧以及对象几何特征点捕捉的功能,如栅格、正交、自动捕捉、目标捕捉等。
二、实验内容1、绘制标题栏2、图层样式管理器及层的设定3、绘制第2章上机题。
实验三基本绘图和基本编辑操作一、实验目的1、掌握绘制直线、圆、弧、椭圆、矩形、正多边形、多段线、样条曲线、圆环和点等命令的操作。
2、掌握基本的图形编辑功能,如取消、重复、删除、移动、旋转、复制、镜像、阵列、剪切、延伸、圆角和倒角等。
《计算机图形学》实验报告
实验报告模板《计算机图形学》实验报告一、实验目的及要求1.实习三维图形的坐标系之间的变换;2.三维图形几何变换;3.掌握三维图形的坐标系之间的变换算法及三维图形几何变换的原理和实现;4.实现二维图形的基本变换(平移、旋转、缩放、错切、对称、复合等);5.实现三维图形的基本变换(平移、旋转、缩放、复合等);二、理论基础在齐次坐标理论下,二维图形几何变换矩阵可用下式表示:⎪⎪⎪⎭⎫⎝⎛===ifchebgdaTnkxx kk2,1,0,)(ϕ平移变换:[x* y* 1] =[x y 1] *0000001ts⎛⎫⎪⎪⎪⎝⎭=[t*x s*y 1]比例变换:[x* y* 1]=[x y 1] *1000101m n⎛⎫⎪⎪⎪⎝⎭=[m+x n+y 1]旋转变换:在平面上的二维图形饶原点逆时针旋转Ө角,变换矩阵为[x* y* 1]=[x y 1] *cos sin0sin cos0001θθθθ⎛⎫⎪- ⎪⎪⎝⎭= [x*cosө-y*sinө]复合变换:以上各种变换矩阵都是以原点为参照点,当以任意参照点进行变换的时候,我们就要用到复合变换矩阵。
三维变换类似于二维,在画图时,把三维坐标转换为二维即可。
三、算法设计与分析二维变换:#define dx 50#define dy 100void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+dx;a[1]=m[i][1]+dy;b[0]=m[i+1][0]+dx;b[1]=m[i+1][1]+dy;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define h 0.1745#include<math.h>void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*cos(h)-m[i][1]*sin(h);a[1]=m[i][1]*cos(h)+m[i][0]*sin(h);b[0]=m[i+1][0]*cos(h)-m[i+1][1]*sin(h);b[1]=m[i+1][1]*cos(h)+m[i+1][0]*sin(h);DDALine(a,b, RGB(0, 200, 255), pDC);}}#define k 2;#define f 2.5void CCGWithVCView::OnTransMove() //缩放{// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Scale Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*k;a[1]=m[i][1]*f;b[0]=m[i+1][0]*k;b[1]=m[i+1][1]*f;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define n 2#define d 0void CCGWithVCView::OnTransOther(){// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Other Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+n*m[i][1];a[1]=m[i][1]+d*m[i][0];b[0]=m[i+1][0]+n*m[i+1][1];b[1]=m[i+1][1]+d*m[i+1][0];DDALine(a,b, RGB(0, 200, 255), pDC);}}三维变换:#include<math.h>#define dx 100#define dy 100#define dz 0void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]+dy-p3d[i][0]+dx/sqrt(2);p2d[i][1]=p3d[i][2]+dz+p3d[i][0]+dx/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}#define k 0.1745void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]*cos(k)-p3d[i][2]*sin(k)-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]*cos(k)+p3d[i][1]*sin(k)+p3d[i][0]/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}四、程序调试及结果的分析二维:三维:五、实验心得及建议在实验过程中,尽管过程中任由许多不会的地方,而且有待于今后的提高和改进,但我加深了对书本上知识的理解与掌握,同时也学到了很多书本上没有东西,并积累了一些宝贵的经验,这对我以后的学习与工作是不无裨益的。
河南工业大学-图形学实验二
实验二:基本图元扫描转换一、实验目的1、掌握图形扫描转换的基本概念;2、掌握直线的绘制算法及程序设计;3、掌握圆弧的绘制算法及程序设计。
二、实验要求1. 在MFC单文档应用程序中,利用MFC应用程序向导生成完整的应用程序基本框架,添加“直线”菜单,在“直线”菜单下添加“DDA画线”子菜单,如图1.1所示,对应DDA 算法绘制直线,直线端点为(100,100),(300,200),颜色为红色,如图1.2所示。
图1.1 菜单示例图图1.2 DDA画线2. 在上题基础上,在“直线”菜单下再添加一个“中点画线”子菜单,如图2.1所示,利用中点画线算法画线,实现鼠标按下抬起绘制直线段的功能,颜色为黑色,如图2.2所示。
图2.1菜单示例图图2.1绘制矩形制作动画图3. 在上题基础上,添加“圆形”菜单,如图3.1所示,利用Bresenham算法编程实现圆的扫描转换,绘制半径为200的黑色圆,如图3.2所示。
图3.1菜单示例图图3.2 Bresenham画圆三、实验内容○1“直线”菜单,“DDA画线”子菜单,“中点画线”子菜单的构建○2DDA画线void CMainFrame::OnDda(){// 获得设备指针CDC *pDC=GetDC();// 定义直线两端点和直线颜色(红色)int x0=100,y0=100,x1=300,y1=200,c=RGB(255,0,0);float x,y,i;float dx,dy,k;dx=(float)(x1-x0);dy=(float)(y1-y0);k=dy/dx;y=y0; x=x0;if(abs(k)<1){ for(;x<=x1;x++){pDC->SetPixel(x,int(y+0.5),c);y=y+k;}}if(abs(k)>=1){for(;y<=y1;y++){pDC->SetPixel(int(x+0.5),y,c);x=x+1/k;}}ReleaseDC(pDC); //释放设备指针}○3中点画线0≤k≤1时中点画线算法的算法步骤为:1.输入直线的两端点P0(x0,y0)和p1(x1,y1)。
计算机网络试验指导书
《》实验报告专业年级姓名学号指导老师实验室使用日期苏州大学计算机科学与技术学院统一印制二零零二年八月苏州大学计算机科学与技术学院计算机图形学实验指导书(MFC和OpenGL版)计算机图形学课题组目录实验一OpenGL程序设计实验二二维基本图元的生成实验三二维图元的填充实验四二维图形的几何变换实验五二维裁剪实验六自由曲线前言一、实验目的1、培养学生动手编程解决实际问题的能力。
2 训练学生分析问题和调试程序的能力。
3 锻炼学生撰写科技实验论文的能力。
二、实验总体要求1 问题分析充分地分析和理解问题本身,弄清要求做什么,用什么算法。
2 程序设计(1) 根据所采用的算法,设计数据结构,画出流程图并编程。
(2) 最后准备调试程序的数据及测试方案。
3 上机调试(1)对程序进行编译,纠正程序中可能出现的语法错误。
(2) 调试前,先运行一遍程序看看究竟将会发生什么。
(3) 如果情况很糟,根据事先设计的测试方案并结合现场情况进行错误跟踪,包括单步调试、设置观察窗输出中间变量值等手段。
4 整理实习报告三、实验报告1 实习内容:采用的算法名称2 问题描述:包括目标、任务、条件约束描述等。
3 设计:数据结构设计和核心算法设计。
主要功能模块的输入,处理(算法框架)和输出。
4 测试范例:测试结果的分析讨论,测试过程中遇到的主要问题及所采用的解决措施。
5 心得:包括程序的改进设想,经验和体会。
6 程序清单:源程序,其中包括变量说明及详细的注释。
实验1 OpenGL 程序设计实验目的巩固计算机图形学和C语言程序设计的相关知识,初步了解通用图形软件包,了解常见的图元的生成方法,学会图形显示设备的初始化及其交互式图形生成的过程,锻炼程序调试的技巧。
实验学时2学时实验类型学习型实验实验要求初步了解OpenGL 程序设计结构;了解OpenGL 的基本数据类型、核心函数及辅助函数的使用。
四、实验内容1、综述这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL 提供了完备的支持。
《计算机图形学》实验报告
《计算机图形学》实验报告一、实验目的计算机图形学是一门研究如何利用计算机生成、处理和显示图形的学科。
通过本次实验,旨在深入理解计算机图形学的基本原理和算法,掌握图形的生成、变换、渲染等技术,并能够运用所学知识解决实际问题,提高对图形学的应用能力和编程实践能力。
二、实验环境本次实验使用的编程语言为 Python,使用的图形库为 Pygame。
开发环境为 PyCharm。
三、实验内容1、直线的生成算法DDA 算法(Digital Differential Analyzer)Bresenham 算法DDA 算法是通过计算直线的斜率来确定每个像素点的位置。
它的基本思想是根据直线的斜率和起始点的坐标,逐步计算出直线上的每个像素点的坐标。
Bresenham 算法则是一种基于误差的直线生成算法。
它通过比较误差值来决定下一个像素点的位置,从而减少了计算量,提高了效率。
在实验中,我们分别实现了这两种算法,并比较了它们的性能和效果。
2、圆的生成算法中点画圆算法中点画圆算法的核心思想是通过判断中点的位置来确定圆上的像素点。
通过不断迭代计算中点的位置,逐步生成整个圆。
在实现过程中,需要注意边界条件的处理和误差的计算。
3、图形的变换平移变换旋转变换缩放变换平移变换是将图形在平面上沿着指定的方向移动一定的距离。
旋转变换是围绕一个中心点将图形旋转一定的角度。
缩放变换则是改变图形的大小。
通过矩阵运算来实现这些变换,可以方便地对图形进行各种操作。
4、图形的填充种子填充算法扫描线填充算法种子填充算法是从指定的种子点开始,将相邻的具有相同颜色或属性的像素点填充为指定的颜色。
扫描线填充算法则是通过扫描图形的每一行,确定需要填充的区间,然后进行填充。
在实验中,我们对不同形状的图形进行了填充,并比较了两种算法的适用情况。
四、实验步骤1、直线生成算法的实现定义直线的起点和终点坐标。
根据所选的算法(DDA 或Bresenham)计算直线上的像素点坐标。
