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

计算机图形学课程设计学院: 信息工程学院专业: 计算机科学与技术学号:姓名:指导老师:时间:目录1、课程设计目的 (2)2、课程设计描述及要求 (2)3、系统开发环境 (2)4、五角星算法原理 (2)5、动态改变五角星的原理 (3)6、核心代码 (3)7、程序运行结果 (3)8、总结 (5)9、参考资料 (5)10、附录 (7)一、设计任务及要求:设计任务:动态绘制一个五角星,并可动态改动五角星的五个角的长度。
要求:此次课程设计的课题为通过编程,五角星的绘制。
并要求可动态改动五角星的五个角的长度,并给出代码和结果截图。
计算机图形学课程设计报告1、课程设计目的本学期系统学习了计算机图形学的概论原理,在学期期末按课程要求进行实验。
通过实验,进一步理解和掌握中点算法、Bresenham算法和二阶差分算法,并掌握以上算法生成圆和直线等图形的基本过程,并正此过程中深化,并提高学生对计算机图形学的了解与运用技巧,同时通过此次课程设计提高动手实践能力与学习分析能力。
2、课程设计描述及要求●画五角星的算法掌握画五角星的原理,设计五角星的算法,相关函数实现画出五角星。
●动态改变五角星通过一定的方法动态改变五角星各个角的大小,使五角星能够达到动态的效果。
3.系统开发环境开发工具:VB 6.0操作系统:Microsoft Windows XP/Windows 20074、五角星的算法原理通过画圆在圆上取5点连接起来既可以得到五角星。
先画个圆,在这个圆上取一点,然后每360/5=72°取一个点,共计5个点,把这5个点连接即可。
5、动态改变五角星的原理最主要是使用Timer控件。
Timer控件可以有规律地间隔一段时间执行一次代码。
Interval 属性是Timer控件最重要的一个属性,它以千分之一秒为单位指定Timer事件之间的间隔,理论上可以认为最少可设置为1毫秒触发一次Timer事件,另外一个重要属性是Enabled属性,它决定计时器是否开始工作。
111级计算机图形学课程设计

计算机图形学课程设计报告课题名称 直线和圆中点Bresenham 算法小组成员林珊珊 0701 1307101118 王金韬 0701 1307101123陈文辉 0702 1307101215 周叶青 0702 1307101224院、系、部 数理系专 业 信息与计算科学 指导教师 林杰※※※※※※※※※ ※※ ※※ ※※ ※※※※※※※※※2007级学生计算机图形学课程设计目录1、课程设计目的 (2)2、课程设计描述及要求 (2)3、系统开发环境 (2)4、直线的Bresenham算法原理 (2)4.1中点Bresenham算法 (2)4.2该进的Bresenham算法 (5)5、圆的Bresenham算法原理 (7)6、程序运行结果 (9)7、总结 (11)8、参考资料 (11)9、附录 (11)计算机图形学课程设计报告1.课程设计目的本学期系统学习了计算机图形学的概论原理,在学期期末按课程要求进行实验。
通过实验,进一步理解和掌握中点算法、Bresenham 算法和二阶差分算法, 并掌握以上算法生成圆和直线等图形的基本过程,提高学生对计算机图形学的了解与运用技巧,同时通过此次课程设计提高动手实践能力与学习分析能力。
2.课程设计描述及要求 ●直线中点Bresenham 算法掌握中点Bresenham 算法绘制直线的原理,设计中点Bresenham 算法,编写Mbline()子函数,使用中点Bresenham 算法绘制斜率为0≦k ≦1的直线 ●圆中点Bresenham 算法掌握八分法中点Bresenham 算法绘制圆的原理,设计八分法绘制圆的中点Bresenham 算法,编写八分法绘制圆的CirclePoint(x,y)子函数,编写绘制整圆的Mbcircle()子函数,使用中点Bresenham 算法绘制圆心位于屏幕客户区中心的圆。
此次课程设计的课题为通过编程,实现圆和直线等基本图形的绘制。
计算机图形学课程设计

《计算机图形学》课程设计报告学院:专业:班级:姓名:学号:指导教师:年11 月15 日一、课程设计报告内容说明:1 、直线:1.1 点生成直线利用for 循环,用pDC->SetPixel(int x,int y,RGB(a,b,c))像素函数画出直线。
1.2 DDA :根据直线的微分方程来产生直线,即dy/dx=△y/△x=(12y y -)/(12x x -)=k其中(1x ,1y )、(2x ,2y )是直线的两个端点坐标。
DDA 算法的原理是增量法,即使x 和y 同时以很小的步长增长,每次增长量与x 和y 的一阶导数成正比。
直线的一阶导数是与△x 和△y 成正比的函数。
可以将x 和y 各递增ε△x 和ε△y 来产生线,ε是很小的量。
从当前画线任意点的位置(i x ,i y )上分别递增两个增量ε△x 和ε△y ,就可以得到直线增长的下一个(1+i x ,1+i y )的坐标位置公式如下1+i x =ix +ε△x1+i y =i y +ε△y1.3 金刚石将圆分为20份,利用直线生成的MoveTo 和LineTo 函数,使每个点与其他点相连。
展示图形为:点生成直线、数值微分法画直线、金刚石 2、曲线2.1 直角坐标系:写出参数表达式后,利用MoveTo 和LineTo 函数,连接各点。
如:正弦曲线:参数方程如下 x_SIN=1000*t; y_SIN=1000*sin(t);极坐标系:写出参数表达式后,利用MoveTo 和LineTo 函数,连接各点。
如:四叶图:参数方程如下r_SIYE=5000*sin(2*t); x_SIYE=r_SIYE*cos(t); y_SIYE=r_SIYE*sin(t);2.2 以实际工作中应用较多的参数样条曲线为例:参数样条曲线定义:给定n+1个控制点Pi (i =0,1,2,…,n ),n 次B 样条曲线段的参数表达式为: 。
依次用线段连接控制点Pi (i =0,1,2,…,n )组成的多边形称为B 样条曲线控制多边形。
计算机图形学课程设计实验报告

计算机图形学课程设计实验报告SHANDONG. UNIVERsrrr OF SCIENCE ^ND TECHNOLOGY《计算机图形学》实验报告班级计算机科学与技术姓名学号实验一基本图形生成算法一、实验目的:1、掌握中点Bresenham 绘制直线的原理;2、设计中点Bresenham 算法;3、掌握八分法中点Bresenham 算法绘制圆的原理;4、设计八分法绘制圆的中点Bresenham 算法;5 、掌握绘制1/4 椭圆弧的上半部分和下半部分的中点Bresenham 算法原理;6、掌握下半部分椭圆偏差判别式的初始值计算方法;7、设计顺时针四分法绘制椭圆的中点Bresenham 算法。
二、实验过程:1、实验描述实验1:使用中点Bresenham 算法绘制斜率为0<=k<=1 的直线。
实验2:使用中点Bresenham 算法绘制圆心位于屏幕客户区中心的圆。
实验3:使用中点Bresenham 算法绘制圆心位于屏幕客户区中心的椭圆。
2、实验过程1)用MFC(exe建立一个单文档工程;2)编写对话框,生成相应对象,设置相应变量;3)在类CLineView 中声明相应函数,并在相关的cpp 文件中实现;4) 在OnDraw ()函数里调用函数实现绘制直线、圆、椭圆;5) 运行程序,输入相应值,绘制出图形。
三、源代码实验1:直线中点Bresenham 算法1.// cline.cpp : implementation file// cline dialog cline::cline(CWnd* pParent /*=NULL*/): CDialog(cline::IDD, pParent){//{{AFX_DATA_INIT(cline) m_x0 = 0;m_y0 = 0;m_x1 = 0;m_y1 = 0; //}}AFX_DATA_INIT}void cline::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(cline)DDX_Text(pDX, IDC_x0, m_x0); DDX_Text(pDX, IDC_y0, m_y0);DDX_Text(pDX, IDC_x1, m_x1); DDX_Text(pDX, IDC_y1, m_y1);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(cline, CDialog)//{{AFX_MSG_MAP(cline) //}}AFX_MSG_MAPEND_MESSAGE_MAP()2、// LineView.hclass CLineView : public CView{public:CLineDoc* GetDocument();。
计算机图形学课程设计

《计算机图形学》课程设计报告题目名称:球体背面剔除消隐算法专业计算机科学与技术班级计科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.01.2 内容与要求球体背面剔除消隐算法内容:(1)掌握背面剔除消隐算法原理;(2)实现矢量点积与叉积运算;(3)透视投影变换(4)曲面体经纬线划分方法功能要求:(1)绘制球体线框模型的透视投影图,使用背面剔除算法实现动态消隐;(2)通过右键菜单显示消隐效果,右键菜单有两个选项:未消隐与消隐;(3)使用键盘的上下左右控制键旋转消隐前后的球体;(4)单击左键增加视距,右击缩短视距;第2章总体设计2.1 球的消隐处理基本原理球体的曲面通常采用一组网格多边形来表示,即把曲面离散成许多小平面片,用平面逼近曲面,一般使用许多四边形来逼近曲面。
计算机图形学-期末课程设计

图形学课程设计报告题目:系别:班级:学号:姓名:指导老师:目录诚信说明......................................................................................................... 错误!未定义书签。
目录 .. (1)一、项目描述 (2)1.1项目的目的 (2)二、项目需求 (2)2.1需求分析 (2)2.2功能描述 (2)三、项目设计 (3)3.1直线扫描算法 (3)3.1.1 DAA扫描线算法 (3)3.1.2 中点扫描线算法 (3)3.1.3 Bresenham扫描线算法 (3)3.2圆的扫描算法 (4)3.2.1 中点画圆扫描算法 (4)3.2.2 Bresenham画圆扫描算法 (4)3.3种子填充算法 (4)3.4图形的基本几何变换算法 (4)3.4.1平移 (4)3.4.2旋转 (5)3.4.3伸缩 (5)3.5 Bezier曲线算法 (5)四、项目效果 (5)五、项目总结 (10)六、参考文献 (11)七、附录 (11)一、项目描述1.1项目的目的通过本次课程设计,使自己了解计算机图形学的有关原理、算法及系统,掌握基本图形显示程序设计方法,及二维和三维图形基本几何变换程序设计方法,为进一步学习计算机辅助设计方面的技术知识打下基础。
1.掌握图形学直线扫描算法:DDA,中点扫描线算法,Bresenham扫描线算法2.掌握图形学画圆扫描算法:中点画圆算法和Bresenham扫描算法3.掌握简单的几何图形的填充算法:种子填充和扫描线填充算法4.掌握简单图形的基本几何变换:平移,旋转和伸缩5.掌握Bezier曲线的生成算法6.熟悉并掌握vc6.0中的MFC使用方法7.掌握C/C++语言编程方法8.在学习基础上设计一个基于MFC的画图软件1.2项目内容在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的画图设计工具也越来越多,类似CAD和CDM及Photoshop的画图软件和图片处理软件的发展也日新月异,因此产生了制作一个类似的画图软件;而且通过制作该程序还能更好的学习图形学编程知识。
《计算机图形学》程序设计报告

计算机图形学课程设计程序设计报告题目:C1 用面向对象技术实现一个类似于Windows画板的程序,要求实现其中的主要交互绘图技术。
学院:同济大学电子与信息工程学院专业:计算机科学与技术学号:099910姓名:耿康康2011年7月程序设计报告一.设计目标和要求1、目标:实现类似于Windows画图程序的基本交互功能,利用Windows编程开发出简单的可视化界面,2、要求:可以实现直线、矩形、圆弧等基本的图元操作,可以改变图形线框的宽度和颜色,可以填充图形,带有可视化的快捷操作图标,具有图形的打开和保存等功能。
二.算法原理介绍本程序是基于Windows编程,改变了传统的DOS应用程序的设计模式。
在DOS模式下,应用程序是封闭的,从入口到出口,层层调用,环环相扣,构成了一条完整的程序链。
而Windows应用程序则采用一种“事件驱动,消息激励”机制,在这种机制下传统的程序结构形式被打破,大量的响应函数构成了程序的主体,当系统或用户触发了某个事件(如定时时间到、用户点击鼠标等),便会产生与该事件关联的消息,然后通过消息去激励相应的响应函数,从而完成既定目标或任务。
本程序是MFC中的单文档窗口应用程序,利用MFC AppWizard(exe)构建了一个名为huatu的工程。
利用了Resource Symbols定义了几个菜单的ID,使它们具有连续的ID值,这样就可以用一个共同的响应函数。
在菜单和工具栏做好之后,就进入了程序的代码设计阶段,首先要在ChuatuView类中添加成员变量并初始化,成员函数以及初始化代码在系统设计与实现中具体给出。
接着在视类的构造函数(CHuatuView::CHuatuView())初始化部分成员变量,在析构函数(CHuatuView::~CHuatuView())中释放指针变量占用的内存。
然后在视类中添加VM_CREATE消息响应函数也就是添加了消息处理函数OnCreate(),加入相应代码。
计算机图形学课程设计报告

一、设计内容与要求、设计题目算法实现时钟运动、总体目标和要求(1)目标:以图形学算法为目标,深入研究。
继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。
通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到巩固和实践计算机图形学课程中的理论和算法;学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。
(2)总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。
(3)开发环境:、设计要求内容:(1)掌握动画基本原理;(2)实现平面几何变换;功能要求:(1)显示时钟三个时针,实现三根时针间的相互关系;(2)通过右键菜单切换时钟背景与时针颜色;设计方案通过使用OpenGL提供的标准库函数,综合图形学Bresenham画线和画圆的算法,OpenGL颜色模型中颜色表示模式等实现指针式时钟运动,并通过点击右键菜单实习时钟背景与时针颜色的转换。
根据Bresenham画线和画圆的算法,画出时钟的指针和表盘。
再根据OpenGL颜色模型定义当前颜色。
设置当时钟运行时交换的菜单,运行程序时可变换时钟背景与时针的颜色。
最后再设置一个恢复菜单恢复开始时表盘与指针的颜色。
二、总体设计、过程流程图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),并且计算(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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.计算机图形学课程设计报告设计课题:专业班级:学号:学生姓名:指导教师:设计时间: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()程序,确定五角星的位置、大小和颜色。
4.添加五环circle()成员函数,并利用colorcircle()函数给五环上色。
5.添加旗子flayA()、flayB()成员函数,确定旗杆的位置,用四点坐标设置旗子的范围,将星星和五环置于旗子中。
源程序// Yzg20166989View.cpp : implementation of the CYzg20166989View class//#include "stdafx.h"#include "Yzg20166989.h"#include "math.h"#include "Yzg20166989Doc.h"#include "Yzg20166989View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////// //////// CYzg20166989ViewIMPLEMENT_DYNCREATE(CYzg20166989View, CView)BEGIN_MESSAGE_MAP(CYzg20166989View, CView)//{{AFX_MSG_MAP(CYzg20166989View)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////// //////// CYzg20166989View construction/destructionCYzg20166989View::CYzg20166989View(){// TODO: add construction code here}CYzg20166989View::~CYzg20166989View(){}BOOL CYzg20166989View::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////// //////// CYzg20166989View drawingvoid CYzg20166989View::OnDraw(CDC* pDC){CYzg20166989Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereAfxGetMainWnd()->SetWindowText("20166989 尹志刚");graph(pDC,0,0);CRect rect(200,120,430,350);CRect rect1(250,195,275,220);CRect rect2(355,195,380,220);CBrush nBrush(RGB(0,255,255)),*pOldnBrush; pOldnBrush=pDC->SelectObject(&nBrush); pDC->Ellipse(200,120,430,350);pDC->SelectObject(pOldnBrush);CBrush Brush(RGB(0,0,0)),*pOldBrush; pOldBrush=pDC->SelectObject(&Brush); pDC->RoundRect(rect1,CPoint(200,200)); pDC->RoundRect(rect2,CPoint(200,200)); pDC->SelectObject(pOldBrush);CBrush mBrush(RGB(255,255,0)),*pOldmBrush; pOldmBrush=pDC->SelectObject(&mBrush); pDC->Arc(250,275,380,355,295,285,335,285); pDC->SelectObject(pOldmBrush);CPoint p1(305,295),p2(325,295);CPen Pen,*pOldPen;Pen.CreatePen(PS_SOLID,3,RGB(0,0,0));pOldPen=pDC->SelectObject(&Pen);pDC->MoveTo(p1);pDC->LineTo(p2);pDC->SelectObject(pOldPen);pDC->SetTextColor(RGB(0,0,255));pDC->TextOut(225,20,"同一个世界,同一个梦想");ddaline(pDC,225,305,225,450,RGB(255,0,0)); ddaline(pDC,405,305,405,450,RGB(255,0,0)); ddaline(pDC,225,450,225,460,RGB(0,0,0));ddaline(pDC,225,450,215,460,RGB(0,0,0));ddaline(pDC,225,450,235,460,RGB(0,0,0));ddaline(pDC,405,450,405,460,RGB(0,0,0));ddaline(pDC,405,450,395,460,RGB(0,0,0));ddaline(pDC,405,450,415,460,RGB(0,0,0));}/////////////////////////////////////////////////////////////////////// //////// CYzg20166989View printingBOOL CYzg20166989View::OnPreparePrinting(CPrintInfo* pInfo) {// default preparationreturn DoPreparePrinting(pInfo);}void CYzg20166989View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CYzg20166989View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////// //////// CYzg20166989View diagnostics#ifdef _DEBUGvoid CYzg20166989View::AssertValid() const{CView::AssertValid();}void CYzg20166989View::Dump(CDumpContext& dc) const{CView::Dump(dc);}CYzg20166989Doc* CYzg20166989View::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CYzg20166989Doc)));return (CYzg20166989Doc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////// //////// CYzg20166989View message handlersvoid CYzg20166989View::ddaline(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color){int length,i;double x,y,dx,dy;length=abs(x1-x0);if(abs(y1-y0)>length)length=abs(y1-y0);dx=(x1-x0)/length;dy=(y1-y0)/length;x=x0+0.5;y=y0+0.5;for(i=1;i<=length;i++){pDC->SetPixel((int)x,(int)y,color);x=x+dx;y=y+dy;}}void CYzg20166989View::flagA(CDC *pDC, int x, int y) {CBrushredBrush(RGB(0xFF,0,0)),yellowBransh(RGB(0xFF,0xff,0)),woodBrash(RGB(180,180,180)),*oldBrush;oldBrush=pDC->SelectObject(&redBrush);pDC->Rectangle(x+20,y+0,x+140,y+70);pDC->SelectObject(&woodBrash);pDC->Rectangle(x+15,y+0,x+20,y+100);pDC->SelectObject(&yellowBransh);pDC->SetPolyFillMode(WINDING);star(pDC,x+40,y+20,10);star(pDC,x+60,y+13,6);star(pDC,x+62,y+30,6);star(pDC,x+55,y+43,6);star(pDC,x+40,y+48,6);pDC->SelectObject(oldBrush);}void CYzg20166989View::flagB(CDC *pDC, int x, int y) {CBrushwoodBrash(RGB(180,180,180)),*oldBrush;pDC->Rectangle(x+85,y+0,x+205,y+70);oldBrush=pDC->SelectObject(&woodBrash);pDC->Rectangle(x+205,y+0,x+210,y+100);pDC->SelectObject(oldBrush);CPenp1(PS_SOLID,2,RGB(0x09,0x51,0xA0)),p2(PS_SOLID,2,RGB(0x05,0x05,0x05)),p3(PS_SOLID,2,RGB(0xFE,0x01,0x00)),p4(PS_SOLID,2,RGB(0xFC,0xFD,0x04)),p5(PS_SOLID,2,RGB(0x30,0xA0,0x2D));colorCircle(pDC,&p1,x+60+65,y+30,10);colorCircle(pDC,&p2,x+82+65,y+30,10);colorCircle(pDC,&p3,x+104+65,y+30,10);colorCircle(pDC,&p4,x+70+65,y+46,10);colorCircle(pDC,&p5,x+92+65,y+46,10);}void CYzg20166989View::star(CDC *pDC, int x, int y, int r) {CPoint stars[5];const double PI=3.1415926;double alpha=PI/10;double beta=2*PI/5;for(int i=0;i<5;i++) {stars[i].x=ceil(r*cos(i*beta+alpha))+x;stars[i].y=ceil(r*sin(i*beta+alpha))+y;}CPoint starx[5]={stars[0],stars[2],stars[4],stars[1],stars[3],};pDC->Polygon(starx,5);}void CYzg20166989View::colorCircle(CDC *pDC, CPen *pen, int x, int y, int r){CPen *old;old=pDC->SelectObject(pen);circle(pDC,x,y,r,FALSE);pDC->SelectObject(old);}void CYzg20166989View::circle(CDC *pDC, int x, int y, int r, BOOL fill){if (fill==TRUE) {CBrush newBrush,*oldBrush;newBrush.CreateSolidBrush(RGB(0X33,0X33,0X33));oldBrush=pDC->SelectObject(&newBrush);pDC->Ellipse(CRect(x-r,y-r,x+r,y+r));pDC->SelectObject(oldBrush);}else{pDC->Ellipse(CRect(x-r,y-r,x+r,y+r));}}void CYzg20166989View::graph(CDC *pDC, int x, int y) {flagA(pDC,x+360,y+42);flagB(pDC,x+40,y+44);}程序运行效果图总结通过课程设计项目的设计、开发、测试、总结和验收各阶段,深入理解计算机图形学课程中的理论和算法,学习计算机图形学相关类的编程技巧,初步掌握游戏开发的前期技能。