ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:161.40KB ,
资源ID:8991032      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8991032.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学课程设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

2、计要求内容:(1)掌握动画基本原理;(2)实现平面几何变换;功能要求:(1)显示时钟三个时针,实现三根时针间的相互关系;(2)通过右键菜单切换时钟背景与时针颜色;1.4设计方案通过使用OpenGL提供的标准库函数,综合图形学Bresenham画线和画圆的算法,OpenGL颜色模型中颜色表示模式等实现指针式时钟运动,并通过点击右键菜单实习时钟背景与时针颜色的转换。根据Bresenham画线和画圆的算法,画出时钟的指针和表盘。再根据OpenGL颜色模型定义当前颜色。设置当时钟运行时交换的菜单,运行程序时可变换时钟背景与时针的颜色。最后再设置一个恢复菜单恢复开始时表盘与指针的颜色。二、总体设计2.1

3、、过程流程图 开始画线画椭圆预定义表盘、各指针的颜色右键恢复菜单可以恢复表盘及各指针原来颜色结束画表盘及各指针右键设置背景色菜单可以改变表盘颜色右键设置时针颜色菜单可以改变时针颜色右键设置分针颜色菜单可以改变分针颜色右键设置秒针颜色菜单可以改变秒针颜色2.2、椭圆的中点生成算法1、椭圆对称性质原理:(1)圆是满足x轴对称的,这样只需要计算原来的1/2点的位置;(2)圆是满足y轴对称的,这样只需要计算原来的1/2点的位置;通过上面分析可以得到实际上我们计算椭圆生成时候,只需要计算1/4个椭圆就可以实现对于所有点的生成了。2、中点椭圆算法内容:(1)输入椭圆的两个半径r1和r2,并且输入椭圆的圆心

4、。设置初始点(x0,y0)的位置为(0,r2);(2)计算区域1中央决策参数的初始值p = ry*ry - rx*rx*ry + 1/4*(rx*rx);(3)在区域1中的每个Xn为止,从n = 0 开始,直到|K|(斜率)小于-1时后结束;如果p 0 ,绘制下一个点(x+1,y),并且计算p = p + r2*r2*(3+2*x);如果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*r

5、x*ry*ry;(5)在区域2中的每个Yn为止,从n = 0开始,直到y = 0时结束。如果P0的情况下,下一个目标点为(x,y-1),并且计算p = p - 2rx*rx*(Yn+1) + rx*rx;如果p=0的情况下,下一个目标点为(x+1,y-1),并且计算 p = p - 2rx*rx*Y(n+1) + 2ry*ry*(Xn+1)+rx*rx;(6)更具对称性原理计算其他3个象限的坐标。(7)急速拿出中心位置在(x1,y1)的位置x = x + x1; y = y + y1;2.3、直线的Bresenham算法原理这种生成直线的算法与数值微分法类似,每次迭代在增量最大方向上均走一步,

6、其方向由增量的正负而定;另一方向上是否也走,取决于计算出来的误差项,误差项所记录的方向同最大增量方向垂直。下面讨论误差项,如图1 所示。图1 误差项计算示意图设图1 中直线满足:0,即:0,所以X为最大增量方向,有-=1,故有每点的坐标计算: (4)因此直线上点的显示坐标为,round(),round()表示最靠近y的整数。从图1可以看出,对于计算出来的(,)点,的取之为;计算出来的( ,)点,的取值为。其根据就是因为更靠近,更靠近。图1 中A点为与的中心点,计算BC长度,若值大于0.5,说明在A点之上,应取,否则取值。设误差: (5) 当,B点在A点上方,有;当SelectObject(&P

7、en); CBrush brush(brushColor); pDC -SelectObject(&brush); /绘制钟面椭圆 pDC-Ellipse(5,5,Rect.right-5,Rect.bottom-5); double Radians; /设置字体颜色为红色 pDC-SetTextColor(RGB(255,0,0); for(i = 1;i GetTextExtent(str,str.GetLength(); Radians = (double)i*6.28/12.0; /计算钟点放置的位置 x = CenterX - (size.cx/2) + (int)(double)(

8、CenterX - 20)* sin(Radians); y = CenterY - (size.cy/2) - (int)(double)(CenterY - 20)* cos(Radians); /绘制钟点 pDC-TextOut(x,y,str); /计算时钟指针的夹角 Radians = (double)Time.GetHour() + (double)Time.GetMinute()/60.0 + (double)Time.GetSecond()/3600.0; Radians *= 6.28/12.0; /创建时钟指针画笔 CPen HourPen(PS_SOLID,5,HourC

9、olor); pDC-SelectObject(&HourPen); /绘制时钟指针 pDC-MoveTo(CenterX,CenterY); pDC-LineTo(CenterX + (int)(double)(CenterX/3)*sin(Radians), CenterY - (int)(double)(CenterY/3)*cos(Radians); Radians = (double)Time.GetMinute()+(double)Time.GetSecond()/60.0; Radians *= 6.28/60.0; /创建分钟指针画笔 CPen MinutePen(PS_SOL

10、ID,3,MinuteColor); pDC-SelectObject(&MinutePen); /绘制分钟指针 pDC-MoveTo(CenterX,CenterY); pDC-LineTo(CenterX + (int)(double)(CenterX*2)/3)*sin(Radians), CenterY - (int)(double)(CenterY*2/3)*cos(Radians); Radians = (double)Time.GetSecond(); Radians *= 6.28/60.0; /创建秒钟指针画笔 CPen SecondPen(PS_SOLID,1,Second

11、Color); pDC-SelectObject(&SecondPen); /绘制秒钟指针 pDC-MoveTo(CenterX,CenterY); pDC-LineTo(CenterX + (int)(double)(CenterX*4)/5)*sin(Radians), CenterY - (int)(double)(CenterY*4)/5*cos(Radians); pDC-SelectObject(OldPen);/ CClockView printingBOOL CClockView:OnPreparePrinting(CPrintInfo* pInfo) / default pr

12、eparation return DoPreparePrinting(pInfo);void CClockView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) / TODO: add extra initialization before printingvoid CClockView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) / TODO: add cleanup after printing/ CClockView diagnostics#ifdef _DEBUGvoi

13、d CClockView:AssertValid() const CView:AssertValid();void CClockView:Dump(CDumpContext& dc) constCView:Dump(dc);CClockDoc* CClockView:GetDocument() / non-debug version is inline ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CClockDoc); return (CClockDoc*)m_pDocument;#endif /_DEBUG/ CClockView message ha

14、ndlersvoid CClockView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call default InvalidateRect(NULL,true); UpdateWindow(); CView:OnTimer(nIDEvent);int CClockView:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CView:OnCreate(lpCreateStruct) = -1) return -1; / TODO: Add your s

15、pecialized creation code here SetTimer(1,1000,NULL); return 0;void CClockView:OnContextMenu(CWnd* pWnd, CPoint point) / TODO: Add your message handler code here CMenu menu; menu.LoadMenu(IDR_CONTEXTMENU); CMenu* pContextMenu = menu.GetSubMenu(0); pContextMenu -TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBU

16、TTON|TPM_RIGHTBUTTON,point.x,point.y,AfxGetMainWnd();void CClockView:OnContextBK() brushColor = RGB(255,228,181);void CClockView:OnContextHour() HourColor = RGB(255,0,0);void CClockView:OnContextMinute() MinuteColor = RGB(128,128,0);void CClockView:OnContextSecond() SecondColor = RGB(0,192,255);void

17、 CClockView:OnContextRestore() brushColor = RGB(240,255,255); HourColor = RGB(0,255,0); MinuteColor = RGB(0,0,255); SecondColor = RGB(255,0,255);四、程序运行说明4.1程序运行结果分析单击运行,生成一个椭圆表盘时钟,其表盘与各指针颜色各不相同,用右键五个菜单修改表盘与指针颜色,菜单“设置背景色”来改变表盘颜色、菜单“设置时针颜色”来改变时针指针颜色、菜单“设置分针颜色”来改变分针指针颜色、菜单“设置秒针颜色”来改变秒针指针颜色、用“恢复”菜单来还原成表

18、盘与指针原来的颜色。改变后的颜色与原来颜色也不各不相同,改变后只能是指定的颜色,不足就是没有对话框多种颜色用来选择,颜色有点单一,用恢复菜单可以恢复原来颜色。因为程序里调用了windows的时间函数,所以显示的时间永远跟电脑时间同步。此结果的实现是通过MFC方法实现的。基本上达到了要求,但不足之处仍有很多,因为个人能力有限。4.2 程序运行结果截图4.2.1 开始时运行时效果4.2.2 右键单步修改颜色效果4.2.3 右键修改颜色后效果五、总结5.1系统不足在本次课程设计中,设计方案存在着很多的死板化的实现方法,也是很不人性化的一点,就是生成结果后通过右键改变表盘与指针的颜色的实现方法,只有一

19、种颜色改变的方案,没有设置对话框来设置多种颜色供选择的,所以改编后的颜色比较单一,此为本次设计方案的不足之一;然后就是表盘的形状是椭圆形的,有点不符合常理,因为现实里的时钟都是圆形的,不过个人认为椭圆可以设计出来,圆形的肯定更容易设计,因为圆是椭圆的特殊情况,只要通过修改个别参数就可以改变此效果,此为设计方案不足之二。再者就是表盘中没有设置分钟小刻度,此为设计方案不足之三。鉴于个人能力真的有限,所以只能设计出此种级别的效果了。因为实验重要的只是思想过程,效果的不美观只能是因为学习的知识还远远不够,所以不能设计出像现实里的时钟一样的效果。5.2 改进方案通过修改我的程序中的右键更改颜色的函数,更

20、改成生成效果是用对话框提示替换颜色的函数就可以达到可以选择改变的颜色了,查找程序中的此函数进行修改,可以达到选择颜色修改的效果。至于把表盘修改成圆形的,通过修改生成表盘的函数参数就可以达到预期修改效果。5.3 心得体会在本次课程设计过程中,基本掌握了 OpenGL提供的标准库函数,Bresenham画线和画椭圆的方法,了解的很多有关于图形学的知识。不过都只是皮毛而已,从中锻炼了自己的动手做实验的能力,但同时也让自己看清了自己的水平,以便在以后的生活里多加强有关这方面的学习,从而提升自己在图形学方面的知识水平。参考文献1.杨旭等. Visual C+编程篇M.北京:电子工业出版社, 2004.2.朱亚平等. OpenGL编程实例M.北京:人民邮电出版社,1999.3.倪明田,吴良芝. 计算机图形学M. 北京:北京大学出版社,2000.4.彭达等. Visual C+多媒体编程技术M. 北京:人民邮电出版社,1999.Welcome ToDownload !欢迎您的下载,资料仅供参考!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1