计算机图形学课程教学设计报告简单图形的绘制
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 算法绘制圆心位于屏幕客户区中心的圆。
此次课程设计的课题为通过编程,实现圆和直线等基本图形的绘制。
计算机图形学的课程设计
计算机图形学课程设计设计题目:画三次Bezier曲线和三次B样条曲线班级:姓名:学号:一、总体目标和要求1 课程设计目的本课程主要内容包括计算机图形学的研究内容、发展与应用,图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面,三维实体造型,分形几何造型,分形艺术,隐藏面消除,光照模型,颜色模型,光线跟踪,纹理细节模拟,常用的计算机动画技术和软件等。
通过本课程设计,使自己了解计算机图形学的有关原理、算法及系统,掌握基本图形显示程序设计方法,及二维和三维图形变换程序设计方法,为进一步学习计算机辅助设计方面的技术知识打下基础。
2 目标以图形学算法为目标,深入研究。
续而策划设计实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面做出评价和改进意见。
通过完成一个完整程序,经历策划、设计、开发、总结。
达到:(1)巩固和实践计算机图形学课程中的理论和算法;(2)学习表现计算机图形学算法的技巧;(3)培养认真学习积极探索的精神。
3总体要求策划、设计并实现一个能够充分表现图形学算法的系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。
二、内容与要求1设计题目画三次Bezier曲线和三次B样条曲线。
2设计要求利用计算机图形学原理画出三次Bezier曲线和三次B样条曲线。
三、算法描述(1)画三次Bezier曲线根据Q(t)=∑P i•B• C i n t i(1-t)n-i(∑中的n=3)并且 C i nBEZ 0,3BEZ 1,3(u)=3u(1-u)(1-u)BEZ2,3(u)=3uu(1-u)BEZ3,3(u)=3uuu三次Bezier函数可以写成P(u)=[u3 u2 u 1]×M×[a b c d] 其中M=[ -1 3 -3 1 ]3 -6 -3 0-3 3 0 01 0 0 0i=0(2)画三次B样条曲线Q i,3(t)=∑P i+l F l,3(t)= P i F0,3(t)+ P i+1 F1,3(t)+ P i+2 F2,3(t)+ P i+ 3 F3,3(t)(其中∑中的n=3)因为四个调和函数F0,3(t)、F1,3(t)、F2,3(t)和F3,3(t) 已知(参看公式7-5-3)因此只要给出四个控制点的位置矢量的坐标,当t在[0,1]范围内取离散地取100个点时(dt=0.01),分别求出每一个曲线上点,相邻点用直线段连接起来,就可以得到相应的B样条曲线。
计算机图形学课程设计
《计算机图形学》课程设计报告题目名称:球体背面剔除消隐算法专业计算机科学与技术班级计科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)总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。
(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,可根据需要选择其中一种,另外,还以根据需要调出颜色板定义颜色。
为了方便选择颜色进行绘图,特意在绘图区增加了颜料盒,操作将更加方便快捷。
1.总体界面如下:1.1“绘图”菜单界面1.2“画笔大小”菜单1.3“风格”菜单1.4“调色板”菜单及颜料盒2.各功能的实现及代码2.1首先在StdAfx.h头文件中定义全局变量extern int num; //记住“绘图”菜单选择extern int num2; //颜色填充选择extern int width; //记住“画笔大小”选择extern int fengge; //“风格”选择(连笔/单笔)extern int col,penstyle; //记住“颜料盒”与“调色板”的选择及画笔风格extern COLORREF c;//各种颜色的选择再在在StdAfx.cpp中初始化以上定义的各变量int num,num2=1,width,col=0,fengge=10,penstyle=0;COLORREF c;2.2.在Draw1View.h中定义CDDraw1View类私有变量POINT points[20];int m_Num;POINT m_pPrev; //画图的前一个终点POINT m_pOrigin; //画图起点POINT m_pPrev2;POINT m_pOrigin2; //记录获取颜料盒颜色时鼠标所在坐标int m_Drag; //鼠标状态HCURSOR m_HCursor;2.3.画图时以按下鼠标左键记住作图起点,为鼠标左键添加消息映射,函数如下:void CDraw1View::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);OnPrepareDC(&dc);dc.DPtoLP(&point);m_pPrev=point; //画图的前一个终点m_pOrigin=point; //点击鼠标左键作为拖动绘图的第一点m_Drag=1; //设置鼠标为拖动状态CView::OnLButtonDown(nFlags, point);}2.4.鼠标左键按下时已将其状态设为拖动状态,当鼠标移动时可以作画,为鼠标移动添加消息映射,函数如下:void CDraw1View::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);OnPrepareDC(&dc);dc.DPtoLP(&point);CBrush MyBrush,*OldBrush;if(m_Drag)//鼠标左键按下时已经将状态设为真{CPen NewPen,*pOldPen;if(col= =0) //选择颜料盒颜色c=dc.GetPixel(m_pOrigin2.x,m_pOrigin2.y);NewPen.CreatePen(penstyle,width,c);pOldPen=dc.SelectObject(&NewPen);if(num2= =0) //选择为图像填充颜色时,num2=0.{MyBrush.CreateSolidBrush(c);OldBrush=dc.SelectObject(&MyBrush);}dc.SetROP2(fengge);//风格(单笔:fengge=10/连笔:fengge=9) switch(num) //选择画直线(num=0)、椭圆(num=1)、矩形(num=2)、曲线(num=3) { case 0: dc.MoveTo(m_pOrigin); dc.LineTo(m_pPrev);dc.MoveTo(m_pOrigin); dc.LineTo(point);break;case 1: dc.Ellipse(m_pOrigin.x,m_pOrigin.y,m_pPrev.x,m_pPrev.y);dc.Ellipse(m_pOrigin.x,m_pOrigin.y,point.x,point.y);break;case 2: dc.Rectangle(m_pOrigin.x,m_pOrigin.y,m_pPrev.x,m_pPrev.y);dc.Rectangle(m_pOrigin.x,m_pOrigin.y,point.x,point.y);break;case 3: if(penstyle= =0) //选择画实曲线时(penstyle=0){dc.MoveTo(m_pOrigin);dc.LineTo(point);m_pOrigin=point;}else dc.SetPixel(point.x,point.y,c); //选择画虚曲线}m_pPrev=point; //把新的点设为所作图形的前一个终点dc.SelectObject(pOldPen);}CView::OnMouseMove(nFlags, point);}2.5.当作完画松开鼠标左键时要将鼠标状态设置为非拖动状态以停止作画,为鼠标左键松开添加消息映射,函数如下:void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point){m_Drag=0;//设置为非拖动状态CView::OnLButtonUp(nFlags, point);2.6.当按下鼠标右键时记录此时鼠标的坐标以获取该像素点的颜色,为鼠标右键按下添加消息映射,函数如下:void CDraw1View::OnRButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);dc.DPtoLP(&point);m_pOrigin2=point;//点击鼠标右键获取此时鼠标所在位置的颜色col=0; //col=0时,所选颜色为颜料盒颜色,col=1时为调色板颜色CView::OnRButtonDown(nFlags, point);}2.7.当需要清除所画图形时,双击鼠标右键,为双击鼠标右键添加消息映射,函数如下:void CDraw1View::OnRButtonDblClk(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCDraw1Doc *pDoc=GetDocument();pDoc->UpdateAllViews(NULL);CView::OnRButtonDblClk(nFlags, point);}2.8.颜料盒代码,先画矩形后填充各种不同的颜色,函数如下:void CDraw1View::OnDraw(CDC* pDC){CDraw1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);int j=0;CBrush MyBrush,*OldBrush;MyBrush.CreateSolidBrush(RGB(205,203,203));OldBrush=pDC->SelectObject(&MyBrush);pDC->Rectangle(0,0,200,40);MyBrush.DeleteObject();for(int i=0;i<=160;){ if(j==0){ MyBrush.CreateSolidBrush(RGB(255,0,0));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==10){ MyBrush.CreateSolidBrush(RGB(0,255,0));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==20){ MyBrush.CreateSolidBrush(RGB(53,121,248));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==30){ MyBrush.CreateSolidBrush(RGB(250,0,250));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==40){ MyBrush.CreateSolidBrush(RGB(151,53,227));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==50){ MyBrush.CreateSolidBrush(RGB(223,225,14));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==60){ MyBrush.CreateSolidBrush(RGB(251,242,4));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==70){ MyBrush.CreateSolidBrush(RGB(3,3,3));OldBrush=pDC->SelectObject(&MyBrush);}else if(j==80){ MyBrush.CreateSolidBrush(RGB(250,250,250));OldBrush=pDC->SelectObject(&MyBrush);}pDC->Rectangle(10+i,10,30+i,30);i+=20;j+=10;MyBrush.DeleteObject();}}2.9.修改画笔大小时,函数如下:void CPenWidth::OnOK(){UpdateData();CPenWidth penwidth; // CPenWidth为对话框类width=m_penwidth;CDialog::OnOK();}3.效果展示:。
计算机图形学课程设计报告
计算机图形学课程设计报告组号:第七组小组成员:宋洁邵海军谷文海冯新科学院:资源环境学院专业班级:地科14 - 2指导老师:向中林2016.12.18目录1实习目的ﻩ12 课程设计题目ﻩ12.1题目要求及内容ﻩ12.1.1要求ﻩ错误!未定义书签。
2.1.2 内容分析.......................................................... 22.2实习原理ﻩ22.2.1 人机交互ﻩ22.2.2动画ﻩ52.2.3 几何变换 (5)2.2.3.1 二维几何图形变换............................. 错误!未定义书签。
2.2.3.2 三维几何图形变换:ﻩ63 主要流程图ﻩ83.1三维图形处理流程图ﻩ83.2 二维几何画板流程图ﻩ94主要源程序 (9)4.1主要源程序ﻩ94.2.1 键盘事件函数....................................... 错误!未定义书签。
4.2.2 菜单.......................................................... 124.2.2.1 创建菜单函数ﻩ124.2.2.2 光照函数 (14)4.2.2.3 几何变换事件ﻩ16164.2.2.3.1 旋转事件ﻩ4.2.2.3.2移动事件 (17)4.2.2.3.3放大事件............................................ 184.2.2.3.4缩小事件............................... 错误!未定义书签。
5问题讨论ﻩ191实习目的课程设计是信息与计算科学专业集中实践性环节之一,是学习完《计算机图形学》课程后进行的一次全面的综合练习。
其目的是:(1)要达到理论与实际应用相结合,使学生能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养良好的程序设计技能。
计算机图形学课程设计报告简单图形的绘制
《计算机图形学》课程设计报告学生:学号:学院:班级:题目: 简单图形的绘制职称2015年7月1日目录目录 (I)一、选题背景 (1)二、算法设计 (2)2.1 绘制直线、圆、椭圆、抛物线 (2)2.1.1 绘制直线 (2)2.1.2 绘制圆 (2)2.1.3 绘制椭圆 (2)2.1.4 绘制抛物线 (2)2.2 三维几何变换 (2)三、程序及功能说明 (5)3.1 绘制直线、圆、椭圆、抛物线 (5)3.1.1 绘制直线 (5)3.1.2 绘制圆 (5)3.1.3 绘制椭圆 (6)3.1.4 绘制抛物线 (6)3.2 图形的平移 (6)3.3 图形的旋转 (7)3.4 图形的缩放 (7)四、结果分析 (8)4.1 绘制直线、圆、椭圆、抛物线 (8)4.1.1 直线 (8)4.1.2 圆 (8)4.1.3 椭圆 (9)4.1.4 抛物线 (9)4.2 图形的平移 (9)4.3 图形的旋转 (10)4.4 图形的缩放 (12)五、总结 (11)六、课程设计心得体会 (15)参考文献 (16)源程序 (17)一、选题背景二、算法设计2.1 绘制直线、圆、椭圆、抛物线2.1.1 绘制直线通过两个点的坐标来绘制直线。
计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA 算法和中点算法。
2.1.2 绘制圆通过运用圆的参数方程cos ;sin x a r y b r θθ=+=+来绘制圆的图形,其中[0,2]θπ∈,(a,b )为圆心,r 为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。
2.1.3 绘制椭圆通过运用椭圆的参数方程cos ;sin x a y b θθ==来绘制椭圆的图形,其中[0,2]θπ∈,是已知的变量,a ,b 分别为长半轴,短半轴,当确定a 和b 后,通过参数方程即可得到这个椭圆的方程。
2.1.4 绘制抛物线根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。
计算机图形学课设报告
计算机图形学课程设计报告专业:班级:学号:姓名:指导教师:[设计题目] :计算机图形学设计与实现[设计地点]: 10教4楼[设计人员]:[设计任务] :1:生成直线的DDA算法2:生成直线的中点算法3:生成圆的中点算法4:生成圆的正负法算法5:生成椭圆的中点算法6:扫描转化为矩形7:种子填充算法8:平移变换9:放缩变换10:直线段裁剪二维线画图元的生成1.1. 生成直线段的DDA 算法 基本原理 扫描转换直线段所谓扫描转换直线段就是计算出落在直线段上或充分靠近它的一串像素,并以此像素集近似替代原连续直线段在屏幕上显示的过程。
生成直线段的DDA 算法求表示直线段的像素集的最简单方法是利用直线方程直接计算。
设直线方程为y=m ·x+B DDA 算法描述:(1) 对给定端点的直线段以一个单位像素为分割区间(2) 根据直线方程得到直线段上对应于横坐标的点的纵坐标,于是得到一系列点列(3) 计算出的纵坐标可能是浮点数,并其四舍五入取整 (4) 描点画图 其中,用公式11(1)i i i i i y mx B m x B mx B m y m ++=+=++=++=+我们就从i y 直接得到1i y +,而不是由1i x +通过直线方程来计算1i y +,由此便消除了算法中的乘法。
递推公式的初值为:00(,)(0,0)x y x y =主要程序代码:void dda_line(int x1,int y1,int x2,int y2,int color) /*画直线*//DDA 算法 {int x;float dx,dy,y,m; if(x1==x2) {for(y=y1;y<=y2;y++) putpixel(x1,y,color); }dx=x2-x1; dy=y2-y1; m=dy/dx;y=y1;for(x=x1;x<=x2;x++) {putpixel(x,(int)(y+0.5),color); y+=m; } }运行效果:1. 2. 生成直线段的中点算法 基本原理假定直线段的斜率m ∈[0,1],并且左下方的端点为,0(0,0)P x y ,右上方的端点为1(1,1)P x y 。
计算机图形学课程教学设计报告
一、设计内容与要求1.1、设计题目算法实现时钟运动1.2、总体目标和要求(1)目标:以图形学算法为目标,深入研究。
继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。
通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到巩固和实践计算机图形学课程中的理论和算法;学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。
(2)总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。
(3)开发环境:Viusal C++ 6.01.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
目录1、课程设计目的 (1)2、系统功能介绍 (1)3、程序代码和分析 (2)4、总结 (4)5、参考文献 (4)6.源程序 (4)计算机图形学课程设计报告1.课程设计目的本课程主要内容包括计算机图形学的研究内容、发展与应用,图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面,三维实体造型,分形几何造型,分形艺术,隐藏面消除,光照模型,颜色模型,光线跟踪,纹理细节模拟,常用的计算机动画技术和软件等。
在学期期末时按课程要求进行运动,提高学生对计算机图形学知识的了解与运用技巧同时通过此次课程设计提高动手实践能力与学习分析能力这就是本次的课程设计的目的。
2.课程设计描述及要求此次课程设计的课题为利用VC++6.0和插件OPENGL制作三维模型。
本设计主要通过建立MFC工程,在工程里建立一个三维模型然后再进行旋转,飞行等运动,来建立一个动态的三维模型。
主要步骤如下:1:工程的建立2:三维模型的建立和映射3:三维模型的运动一:工程的建立1:系统配置。
先对机子安装VC++6.0.在建立工程前,本实验需要添加OPENGL 插件,故需要在Windows环境下安装GLUT步骤如下:1、将下载的压缩包解开,将得到5个文件2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。
把解压得到的glut.h放到这个文件夹。
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
(典型的位置为:C:\Windows\System32)然后建立一个OpenGL工程测试这里以VisualStudio2005为例。
计算机图形学课程设计-三维真实感图形设计与绘制
计算机图形学课程设计报告一、实验题目三维真实感图形设计与绘制(1)题目内容说明:本题目要求应用OpenGL的光照技术和纹理技术实现一个简单的三维真实感图形的程序设计。
具体要求实现功能:1)通过对话方式实现交互式设计光照模型功能。
2)实现三维模型纹理映射功能3)用鼠标跟踪球方法实现三维模型的空间旋转2)实现鼠标跟踪球方法程序二、需求分析真实感图形的设计与绘制,是计算机图形学中的一个重要研究领域,也是三维实体造型系统和特征造型系统的重要组成部分。
一般地,三维实体在计算机显示屏上有三种表现形式:简单线框图、线框消隐图和真实感图形。
其中,简单线框图能够粗略表达实体的形状,但由于简单线框图的二义性,从而导致表达其的实体形状具有不确定性。
而线框消隐图虽然能反映实体各表面间的相互遮挡关系,从而达到消除简单线框图产生的二义性的目的,但是这两者一样地只能反映实体的几何形状和实体间的相互关系,而不能反映实体表面的特征,如表面的颜色、材质、纹理等。
所以,只有真实感图形才能表现实体的这些特征,因此,在三维实体造型中,生成三维实体的光照模型,进行实体的真实感绘制与显示占有重要的地位,是很有必要的,也是我做此设计的初衷。
在设计中,我主要使用Opengl绘制真实感图形,它作为一种强大的三维图形开发工具,通过便捷的编程接口提供了处理光照和物体材质、颜色属性等通用功能。
真实感图形学是计算机图形的核心内容之一,是最能直接反映图形学魅力的分支。
寻求能准确地描述客观世界中各种现象与景观的数学模型,并逼真地再现这些现象与景观,是图形学的一个重要研究课题。
很多自然景物难以用几何模型描述,如烟雾、植物、水波、火焰等。
本文所讨论的几种建模及绘制技术都超越了几何模型的限制,能够用简单的模型描述复杂的自然景物。
在计算机的图形设备上实现真实感图形必须完成的四个基本任务。
1. 三维场景的描述。
三维造型。
2. 将三维几何描述转换成为二维透视图。
透视变换。
计算机图形学课程设计----课程设计
计算机图形学课程设计学 院:计算机科学学院 班 级:学 号:学生姓名:指导教师:2008年1月设计一一、课题说明用所学算法编写实现图形比例,移动,旋转变换的程序二、概要设计比例变换矩阵:移动变换矩阵:旋转变换矩阵:由于在640*480默认的显示模式下,原点(0,0)坐标在屏幕的左上角,左上角向右下角走,x 值增大,左上角向右上角走,y 值增大。
为了便于显示与理解,把原点定在(320,240)点。
则移动变换与旋转变换的矩阵就会改变。
移动变换矩阵:旋转变换后,x 坐标变为:320+(x-320)*cos(a)-(240-y)*sin(a);y 坐标变为:240-(x-320)*sin(a)-(240-y)*cos(a)本程序通过一个三角形比例,移动,旋转变换演示比例,移动,旋转后的结果。
首先画出需要变换的三角形(通过给出三角形的三个顶点画出三角形),对三个三角形的顶点变换实现比例,移动,旋转变换操作。
三、源程序及注释#include <stdio.h> #include <graphics.h>/*加入c 图形库*/ #include <math.h>yidong(int dx,int dy)/*实现移动函数*/S x 0 0 0 S y 0 0 0 1 1 0 0 0 1 0 T x T y 1cos (a) sin (a) 0 -sin (a) cos (a) 0 0 0 11 0 00 1 0 T x -- T y 1{moveto(320+dx,240-dy);lineto(420+dx,120-dy);lineto(450+dx,140-dy);变换三角形三个点的坐标实现移动变换*/lineto(320+dx,240-dy);/*}实现比例函数*/bilie(float Sx,float Sy) /*{moveto(320*Sx,240*Sy);lineto(420*Sx,120*Sy);lineto(450*Sx,140*Sy);变换三角形三个点的坐标实现比列变换*/lineto(320*Sx,240*Sy); /*}实现旋转函数*/xuanzhuan(float a) /*{float p;moveto(320,240);lineto(320+(420-320)*cos(a)-(240-120)*sin(a),240-(420-320)*sin(a)-(240-120)*cos(a));lineto(320+(450-320)*cos(a)-(240-140)*sin(a),240-(450-320)*sin(a)-(240-140)*cos(a));变换三角形三个点的坐标实现旋转变换*/lineto(320,240); /*}main(){int i,j;float X,Y,bx,by,a;int gdriver=DETECT,gmode; /*初始化显示模式参数*/初始化显示为默认的640*480、16色模式 */ initgraph(&gdriver,&gmode,""); /*i=20;j=240;moveto(i,j);/*使用双循环画点函数画出表格中的纵坐标*/for(i=20;i<=620;i+=20)lineto(i,240);i=320;j=20;moveto(i,j);/*使用双循环画点函数画出表格中的横坐标*/for(j=20;j<=460;j+=20)lineto(320,j);moveto(320,240);lineto(420,120);lineto(450,140);lineto(320,240);/*画出需变换的三角形,其三个顶点分别为(320,240);(420,120) ;(450,140)*/printf("please input X,Y to move:"); scanf("%f%f",&X,&Y); /*输入移动量 */ yidong(X,Y);printf("please input bx,by to scale:"); scanf("%f%f",&bx,&by); /*输入x 方向,y 方向缩放大小 */ bilie(bx,by);printf("please input a to circumgyrate:"); scanf("%f",&a); /*输入旋转角度,a 为正,则逆时针旋转*/ xuanzhuan(a); }四、运行结果原始三角形移动(40,40)后的三角形旋转45o 后的三角x 轴方向上缩小0.5倍后的三角形设计二一、课题说明编写一个AutoLISP程序,其功能是:画一个轴衬的两个视图,如图4所示。
计算机图形学(C语言)教案
计算机图形学(C语言)教案一、教案概述1. 目标:通过本章学习,使学生掌握C语言在计算机图形学中的应用,了解图形学基本概念,能够使用C语言进行简单的图形绘制和处理。
2. 课时:2课时3. 教学方法:讲授、实践相结合4. 教学工具:多媒体教学、编程环境二、教学内容1. 计算机图形学基本概念图形与图像的定义图形系统的组成图形表示方法2. C语言图形库介绍SDL库简介OpenGL简介Win32图形编程简介3. 图形绘制基本方法像素操作直线绘制圆绘制图形变换三、教学过程1. 引入计算机图形学的基本概念,让学生了解图形学在计算机领域的重要性和应用范围。
2. 介绍C语言图形库,对比不同图形库的特点和适用场景,引导学生选择合适的图形库进行学习。
3. 通过实例讲解图形绘制的基本方法,让学生掌握像素操作、直线绘制、圆绘制和图形变换等技巧。
四、课堂练习1. 编写一个简单的C程序,使用像素操作绘制一个红色矩形。
2. 编写一个C程序,使用SDL库绘制一条直线。
3. 编写一个C程序,使用OpenGL绘制一个圆形。
五、课后作业1. 学习Win32图形编程,了解其与SDL、OpenGL的异同。
2. 思考如何将图形学应用于实际项目中,例如游戏开发、图像处理等。
3. 探索其他图形库,如SFML、Allegro等,了解其特点和适用场景。
六、图形坐标系统与变换1. 教学目标:理解图形坐标系统的概念。
掌握坐标变换的原理和应用。
能够运用坐标变换对图形进行变换。
2. 教学内容:坐标系统的分类(笛卡尔坐标系、直角坐标系、极坐标系等)。
坐标变换的类型(平移、旋转、缩放、反射等)。
矩阵与坐标变换的关系。
变换在计算机图形学中的应用。
3. 教学过程:通过图形实例讲解不同坐标系统的特点。
讲解坐标变换的数学原理,并通过动画演示变换过程。
引导学生通过编程实践应用坐标变换。
七、图形界面设计1. 教学目标:学习图形界面设计的基本原则。
掌握常用的图形界面元素和布局方法。
计算机图形学课程设计__图形绘制变换
计算机图形学实验报告课程名称 : 计算机图形学实验名称 :图形绘制与变换学院 : 电子信息工程学院专业 : 计算机科学与技术班级 : 11计科本 01班学号 : 111102020103 姓名 : 张慧指导教师 : 王征风二零一四年目录一、引言------------------------------------------------------------------------------------------------------------- 3二、设计需求 ------------------------------------------------------------------------------------------------------ 32.1 设计目标----------------------------------------------------------------------------------------------- 32.2 设计环境----------------------------------------------------------------------------------------------- 32.2.1 VC++6.0-------------------------------------------------------------------------------------- 32.2.2 MFC-------------------------------------------------------------------------------------------- 42.3 设计题目及要求 ------------------------------------------------------------------------------------ 42.4 总体流程图 ------------------------------------------------------------------------------------------ 4三、课程设计原理 ------------------------------------------------------------------------------------------------ 53.1 实现的算法-------------------------------------------------------------------------------------------- 53.1.2 Bresenham算法画直线 -------------------------------------------------------------------- 53.1.3 中心点算法画圆和椭圆-------------------------------------------------------------------- 53.2 图形变换的基本原理-------------------------------------------------------------------------------- 73.2.1 平移变换-------------------------------------------------------------------------------------- 73.2.2 旋转变换 ------------------------------------------------------------------------------------ 83.2.3 比例变换 ------------------------------------------------------------------------------------ 8四、总体设计与功能实现 --------------------------------------------------------------------------------------- 84.1 主要界面设计----------------------------------------------------------------------------------------- 84.2 设置颜色界面----------------------------------------------------------------------------------------- 84.2.1 界面设置代码-------------------------------------------------------------------------------- 84.2.2 运行结果-------------------------------------------------------------------------------------- 94.3 二维线画图元实现----------------------------------------------------------------------------------- 94.4 画多边形功能的实现 ---------------------------------------------------------------------------- 134.5 画Bezier曲线功能的实现--------------------------------------------------------------------- 144.6 二维图形变换的实现 ---------------------------------------------------------------------------- 164.7 三维图形的变换 ---------------------------------------------------------------------------------- 17五、实验心得体会一、引言计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
计算机图形学课程设计报告报告实验报告
《计算机图形学》实验报告班级计算机科学与技术姓名学号2014 年6 月2 日实验一基本图形生成算法一、实验目的: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 dialogcline::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();..........void Mbline(double,double,double,double); //直线中点Bresenham函数.......}3、// Line.cpp//*******************直线中点Bresenham函数*********************/void CLineView::Mbline(double x0, double y0, double x1, double y1) {CClientDC dc(this);COLORREF rgb=RGB(0,0,255); //定义直线颜色为蓝色double x,y,d,k;x=x0; y=y0; k=(y1-y0)/(x1-x0); d=0.5-k;for(x=x0;x<=x1;x++){dc.SetPixel((int)x,(int)y,rgb);if(d<0){y++;d+=1-k;}elsed-=k;}}4、//LineView.cppvoid CLineView::OnDraw(CDC* pDC){CLineDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herecline a;a.DoModal();//初始化CLineView::Mbline(a.m_x0,a.m_y0,a.m_x1,a.m_y1); }实验2:圆中点Bresenham算法1、//cricle.cpp// Ccricle dialogCcricle::Ccricle(CWnd* pParent /*=NULL*/): CDialog(Ccricle::IDD, pParent){//{{AFX_DATA_INIT(Ccricle)m_r = 0;//}}AFX_DATA_INIT}void Ccricle::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(Ccricle)DDX_Text(pDX, r_EDIT, m_r);//}}AFX_DATA_MAP}2、//CcircleView.hclass CCcircleView : public CView{.......public:CCcircleDoc* GetDocument();void CirclePoint(double,double); //八分法画圆函数void Mbcircle(double); //圆中点Bresenham函数........}3、//CcircleView.cppvoid CCcircleView::OnDraw(CDC* pDC){CCcircleDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCcricle r;r.DoModal();CCcircleView::Mbcircle(r.m_r);//画圆}4、//CcircleView.cpp//*******************八分法画圆*************************************/ void CCcircleView::CirclePoint(double x,double y){CClientDC dc(this);COLORREF rgb=RGB(0,0,255);dc.SetPixel((int)(300+x),(int)(300+y),rgb);dc.SetPixel((int)(300-x),(int)(300+y),rgb);dc.SetPixel((int)(300+x),(int)(300-y),rgb);dc.SetPixel((int)(300-x),(int)(300-y),rgb);dc.SetPixel((int)(300+y),(int)(300+x),rgb);dc.SetPixel((int)(300-y),(int)(300+x),rgb);dc.SetPixel((int)(300+y),(int)(300-x),rgb);dc.SetPixel((int)(300-y),(int)(300-x),rgb);}//**************************圆中点Bresenham函数*********************/ void CCcircleView::Mbcircle(double r){double x,y,d;COLORREF rgb=RGB(0,0,255);d=1.25-r;x=0;y=r;for(x=0;x<y;x++){CirclePoint(x,y); //调用八分法画圆子函数if(d<0)d+=2*x+3;else{d+=2*(x-y)+5;y--;}}}实验3:椭圆中点Bresenham算法1、//ellipse1.cpp// Cellipse dialogCellipse::Cellipse(CWnd* pParent /*=NULL*/) : CDialog(Cellipse::IDD, pParent){//{{AFX_DATA_INIT(Cellipse)m_a = 0;m_b = 0;//}}AFX_DATA_INIT}void Cellipse::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(Cellipse)DDX_Text(pDX, IDC_EDIT1, m_a);DDX_Text(pDX, IDC_EDIT2, m_b);//}}AFX_DATA_MAP}2、//EllipseView.hclass CEllipseView : public CView{......................public:CEllipseDoc* GetDocument();void EllipsePoint(double,double); //四分法画椭圆void Mbellipse(double a, double b); //椭圆中点Bresenham函数..................}3、//Ellipse.cpp//*****************四分法画椭圆********************************/void CEllipseView::EllipsePoint(double x,double y){CClientDC dc(this);COLORREF rgb=RGB(0,0,255);dc.SetPixel((int)(300+x),(int)(300+y),rgb);dc.SetPixel((int)(300-x),(int)(300+y),rgb);dc.SetPixel((int)(300+x),(int)(300-y),rgb);dc.SetPixel((int)(300-x),(int)(300-y),rgb);}//************************椭圆中点Bresenham函数*********************/ void CEllipseView::Mbellipse(double a, double b){double x,y,d1,d2;x=0;y=b;d1=b*b+a*a*(-b+0.25);EllipsePoint(x,y);while(b*b*(x+1)<a*a*(y-0.5))//椭圆AC弧段{if(d1<0)d1+=b*b*(2*x+3);else{d1+=b*b*(2*x+3)+a*a*(-2*y+2);y--;}x++;EllipsePoint(x,y);}d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;//椭圆CB弧段while(y>0){if(d2<0){d2+=b*b*(2*x+2)+a*a*(-2*y+3);x++;}elsed2+=a*a*(-2*y+3);y--;EllipsePoint(x,y);}}4、//EllipseView.cppvoid CEllipseView::OnDraw(CDC* pDC){CEllipseDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCellipse el;el.DoModal();//初始化CEllipseView::Mbellipse(el.m_a, el.m_b);//画椭圆}四、实结果验实验1:直线中点Bresenham算法实验2:圆中点Bresenham 算法实验3:椭圆中点Bresenham 算法实验二有效边表填充算法一、实验目的:1、设计有效边表结点和边表结点数据结构;2、设计有效边表填充算法;3、编程实现有效边表填充算法。
计算机图形学报告
. . . . .. . 优质资料 .. 计算机图形学 (2017年秋季学期)实验 报 告系别:计算机科学与技术 班级: : 学号:实验名称:2-真实感图形绘制2020-11-132/3《计算机图形学》实验报告实验名称真实感图形绘制 实验序号 2实验日期 2017.12.13 实验人 一、实验目的、要求与环境1.目的:通过实验,学生应掌握通过计算机程序进行真实感图形绘制的基本原理,特别是对三维显示对象进行纹理映射的基本方法,将理论和实际应用切实结合起来。
2.要求:对一个三维立方体进行旋转,对其6个不同的面进行6个不同图像的纹理映射,并进行投影变换与显示,分析增强后的视觉效果,提交实验报告。
3.环境:Windows 7操作系统Microsoft Visual Studio 2005OpenGL 函数库4. 自带位图文件(换成你自己的图像文件):总成绩:评语:日期:2020-11-1311/12二、实验容与步骤1. 准备相关图像文件。
2. 进行立方体各面图像与旋转速度的大体设计。
3.在Windows 7 操作系统上,打开Microsoft Visual Studio 2005,编写相关程序,完成程序主体框架结构。
4.编写六面体显示相关的程序代码。
5.编写六面体旋转相关的程序代码。
6.编写深度检测相关的程序代码。
7. 编写纹理载入功能的相关程序代码。
8. 编写纹理参数定义功能的相关程序代码。
9. 编写纹理映射功能的相关程序代码。
10.对程序进行相关调试,修改程序,去除其中的BUG 。
11. 观察纹理映射后的六面体的旋转显示,与预想的结果进行对比,修改相关程序参数。
12.截屏,保留实验结果,进行实验结果分析,并撰写实验报告。
2020-11-13 2/32020-11-13 11/12四、编译过程截图五、实验结果与分析(下面是一个例子,换上你自己的图)实验结果:实验分析程序通过glBindTexture(GL_TEXTURE_2D, lastTextureID);语句,完成了恢复之2020-11-13 2/32020-11-13 11/122020-11-13 2/32020-11-13 11/122020-11-13 2/3。
《计算机图形学》教案
04
05
掌握动画的渲染和后期处理 ,以实现逼真的视觉效果。
04
图形算法
几何变换
总结词
描述物体在二维或三维空间中的位置、方向和大小的变化。
详细描述
几何变换包括平移、旋转、缩放和剪切等操作,它们可以通 过矩阵运算来实现。通过几何变换,可以改变物体的位置、 方向和大小,从而创造出更加丰富和多样的图形效果。
05
实践项目
游戏开发
游戏角色设计
学习使用计算机图形学技术设计 游戏中的角色,包括人物、怪物 、NPC等,注重造型、色彩、纹
理等方面的设计。
游戏场景渲染
掌握如何使用计算机图形学技术渲 染游戏中的场景,包括自然环境、 建筑、道具等,注重光影效果和视 觉效果的呈现。
游戏动画制作
学习使用计算机图形学技术制作游 戏中的动画,包括人物动作、特效 等,注重动画的流畅性和逼真感。
图像识别技术
特征提取
学习使用计算机图形学技术提取 图像中的特征,包括颜色、形状 、纹理等方面的特征,注重特征
的准确性和稳定性。
目标检测
掌握如何使用计算机图形学技术 检测图像中的目标物体,包括人 脸、物体等,注重检测的准确率
和实时性。
图像识别应用
了解计算机图形学在图像识别方 面的应用,包括人脸识别、物体 识别等,注重实际应用的效果和
光照模型
总结词
描述物体表面反射光的方式。
详细描述
光照模型用于描述物体表面反射光的方式,包括漫反射、镜面反射和环境光等。通过设置不同的光照参数,可以 模拟出不同的光照效果,从而创造出更加真实和生动的图形。
纹理映射
总结词
将纹理图像映射到物体表面的技术。
详细描述
纹理映射是一种将纹理图像映射到物体表面的技术,它可以增加物体的细节和真实感。通过纹理映射 ,可以将复杂的纹理图像应用到简单的几何形状上,从而创造出更加丰富和细腻的图形效果。
【免费下载】计算机图形学课程设计报告
其中:
由于(3) 式中的 ax , bx , cx , dx 和 ay , by , cy , dy 均与参数 t 无关, 这样可在 计算 x ( t) , y ( t)之前先计算出这些系数. 与(2) 式相比; (3) 式中 x ( t) , y ( t) 的参 数方程的三次多项式的个数各减少了 3 个(即仅有 1 个三次多项式) , 从而提高 了 B 样条曲线的生成速度.
四、程序结构
该作业的过程比较的设计思路是:新建一个工程文件,设置需要的变量和要使 用到的画笔为了使生成的曲线直观,我设置了 8 个顶点。然后添加绘制曲线函 数,在这个函数里主要实现对节点的控制,并调用画笔绘制出曲线。
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配0料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高高与中中带资资负料料荷试试下卷卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并中3试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机图形学》课程设计报告学生姓名:学号:学院:班级:题目: 简单图形的绘制职称2015年7月1日目录目录 (I)一、选题背景 (1)二、算法设计 (2)2.1 绘制直线、圆、椭圆、抛物线 (2)2.1.1 绘制直线 (2)2.1.2 绘制圆 (2)2.1.3 绘制椭圆 (2)2.1.4 绘制抛物线 (2)2.2 三维几何变换 (2)三、程序及功能说明 (5)3.1 绘制直线、圆、椭圆、抛物线...... (5)3.1.1 绘制直线 (5)3.1.2 绘制圆 (5)3.1.3 绘制椭圆 (5)3.1.4 绘制抛物线 (6)3.2 图形的平移 (6)3.3 图形的旋转 (6)3.4 图形的缩放 (7)四、结果分析 (7)4.1 绘制直线、圆、椭圆、抛物线 (7)4.1.1 直线 (7)4.1.2 圆 (8)4.1.3 椭圆 (8)4.1.4 抛物线 (8)4.2 图形的平移 (9)4.3 图形的旋转 (10)4.4 图形的缩放 (11)五、总结 (10)六、课程设计心得体会 (14)参考文献 (15)源程序 (16)一、选题背景二、算法设计2.1 绘制直线、圆、椭圆、抛物线2.1.1 绘制直线通过两个点的坐标来绘制直线。
计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA 算法和中点算法。
2.1.2 绘制圆通过运用圆的参数方程cos ;sin x a r y b r θθ=+=+来绘制圆的图形,其中[0,2]θπ∈,(a,b )为圆心,r 为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。
2.1.3 绘制椭圆通过运用椭圆的参数方程cos ;sin x a y b θθ==来绘制椭圆的图形,其中[0,2]θπ∈,是已知的变量,a ,b 分别为长半轴,短半轴,当确定a 和b 后,通过参数方程即可得到这个椭圆的方程。
2.1.4 绘制抛物线根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。
2.2 三维几何变换三维几何变换是二维几何变换的推广。
二维几何变换在齐次坐标空间中可用3⨯3的变换矩阵表示,类似的,三维几何变换在齐次坐标空间中可用4⨯4的变换矩阵表示。
三维空间中的点(),,x y z 的齐次坐标定义为(),,h h h x y z ,其中,h 为不等与零的任意常数,h x hx =,h y hy =,h z hz =。
亦即点(),,x y z 对应4维齐次坐标空间的一条直线:h hh h x hx y hy z hz w hy=⎧⎪=⎪⎨=⎪⎪=⎩ (2.2.1)通常为了简单起见,取(),,,1x y z 为(),,x y z 的齐次坐标。
(1)平移变换平移变换将点(),,P x y z 在三个坐标轴方向上分别移动距离,,x y z t t t ,得到新的一点(),,P x y z '''',它们之间的关系表示为:P P T '=+,其中,,Tx y z T t t t ⎡⎤=⎣⎦。
三维平移变换在其次坐标下的矩阵表示为:(),,1000100010001x y z x y t t t z t t T t ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.2) (2)放缩变换三维放缩变换在齐次坐标下的矩阵表示:(),,00000000001x y z x y s s s z s s S s ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.3) 此变换的参照点为坐标原点,我们可以按下面步骤建立关于空间任一参照点(),,r r r r P x y z 的缩放变换:(1)平移使r P 落于原点,变换为(),,r r r T x y z --; (2)进行放缩变换(),,x y z S s s s ;(3)平移r P 回到原先的位置,变换为(),,r r r T x y z 。
从而关于参照点r P 的缩放变换();,,r r r r S P x y z 为()()()();,,,,,,,,r r r r r r r x y z r r r S P x y z T x y z S s s s T x y z =--g g (2.2.4) (3)旋转变换给定一点(),,P x y z ,首先将P 点y 和z 坐标表示成极坐标,即()(),,,cos ,sin x y z x r r ϕϕ=,其中r =。
将P 点绕x 轴旋转θ角后,得到(),,P x y z ''''。
易知:()()cos sin x x y r z r ϕθϕθ⎧'=⎪'=+⎨⎪'=+⎩ (2.2.5)上式矩阵形式为:1000cos sin 0sin cos x x y y z z θθθθ'⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥'=-⎢⎥⎢⎥⎢⎥'⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ (2.2.6)从而绕x 轴旋转θ角的变换在齐次坐标下的矩阵表示为:()10000cos sin 00cos sin 00001x R θθθθθ⎡⎤⎢⎥-⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.7) 类似的,绕y 轴和z 轴的旋转θ的变换矩阵分别为:()cos 0sin 00100sin 0cos 001y R θθθθθ-⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.8) ()cos sin 00sin cos 000010001z R θθθθθ-⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.9) 如果要绕空间任意轴01P P →旋转θ角,可按如下步骤实现:(1)以0P 为原点O ,01P P →为Oz 轴建立新的坐标系Ox yz ;(2)求出从坐标系Oxyz 到坐标系Ox yz 的变换M ;(3)将图形对象变换到坐标系Ox yz 中;(4)在新坐标系Ox yz 中绕Oz 轴旋转θ角,变换为()z R θ; (5)将图形对象变换为原坐标系Oxyz 中,变换为1M -。
这样绕01P P →旋转θ角的变换为:()1z M R M θ- (2.2.10)三、程序及功能说明3.1 绘制直线、圆、椭圆、抛物线……3.1.1 绘制直线plot(A,B)通过运用matlab 中的plot 函数画出两点之间的直线图像。
其中A,B 为直线上的两个点的坐标,通过两点绘制直线。
3.1.2 绘制圆function circle(A,R) alpha=0:pi/50:2*pi;%角度[0,2*pi] %R=2;%半径 x=R*cos(alpha)+A(1); y=R*sin(alpha)+A(2); plot(x,y,'-') axis equal首先先对角度alpha 分割成小区间,且求出相应的cos 和sin 值,再根据输入的半径和圆心坐标A ,带入公式求得圆上的点的坐标,再绘制出图像。
3.1.3 绘制椭圆function tuocircle(a,b)t=0:pi/20:2*pi; x=a*cos(t); y=b*sin(t); plot(x,y)首先先对角度t 分割成小区间得出相应的cos 和sin 值,根据再根据输入的长半轴a 与短半轴b 完善参数方程求得椭圆上的点的坐标,再绘制出图像。
3.1.4 绘制抛物线function parabola(A,B,C)x=[A(1) B(1) C(1)]; y=[A(2) B(2) C(2)];%y=ax^2+bp=polyfit(x,y,2);t=-10:.1:10;%指定绘图区间s=polyval(p,t);plot(t,s,x,y,'or')通过三个点绘制抛物线是通过三点的拟合绘制出图像;通过函数是在一个区间上画出函数图像。
3.2 图形的平移function change(T1,V1)中:T=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1;]T(1,4)=T1(1); T(2,4)=T1(2); T(3,4)=T1(3);ALL=T%最后的变换矩阵V2=ALL*V1';V=V2;先设T为平移变换矩阵,然后通过带入平移的长度,形成最终的平移矩阵,成为最重的变换举证ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。
3.3图形的旋转function change2(R1,V1)R=[0 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];sina=sin(R1); cosa=cos(R1);R(1,1)=cosa; R(1,2)=-sina; R(2,1)=sina; R(2,2)=cosa;ALL=R%最后的变换矩阵V2=ALL*V1';V=V2;先设R为旋转变换矩阵,首先就将带入的角度求出sina和cosa值,然后对应公式将值带入矩阵的对应位置形成最终的旋转矩阵,成为最终的变换矩阵ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。
3.4图形的缩放function change3(S1,V1)S=[0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 1];S(1,1)=S1(1); S(2,2)=S1(2); S(3,3)=S1(3);ALL=SV2=ALL*V1';V=V2;将S设为缩放变换矩阵,然后对应公式将缩放的值带入矩阵的对应位置形成最终的平移矩阵,成为最终的变换矩阵ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。
四、结果分析4.1绘制直线、圆、椭圆、抛物线4.1.1 直线>> line([1 2],[2 1])4.1.2 圆>> circle([2 3],2)4.1.3 椭圆>> tuocircle(30,0.7)4.1.4 抛物线根据三个点画出抛物线:>> parabola([1 2],[5 6],[3 9])根据函数画抛物线:4.2 图形的平移>> showCubic([0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1]) >> change([4,5,6],[0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1])平移矩阵:1004010500160001T ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦最终总变换矩阵:1004010500160001ALL ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦变换后的矩阵:45715571567146714561556156614661V ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦4.3 图形的旋转>> showCubic([0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1]) >> change2(pi/3,[0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1])旋转矩阵:0.50000.8660000.86600.50000000 1.00000000 1.0000R -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 最终变换矩阵:0.50000.8660000.86600.50000000 1.00000000 1.0000ALL -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 变换后的矩阵:0 1.0000 1.00000.50000.8660 1.0000 1.00000.3660 1.3660 1.0000 1.00000.86600.5000 1.0000 1.0000000.0000 1.00000.50000.86600.0000 1.00000.3660 1.36600.0000 1.00000.86600.50000.0000 1.0000V ⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥-⎢⎥=⎢⎥⎢⎥⎢⎢-⎢-⎢⎣⎦⎥⎥⎥⎥4.4>> showCubic([0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1]) >>change3([0.8,0.5,0.3],[0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1])缩放矩阵:0.800000000.500000000.30000000 1.0000S ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 最终变换矩阵:0.800000000.500000000.30000000 1.0000ALL ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦变换后矩阵:000.3000 1.00000.800000.3000 1.00000.80000.50000.3000 1.000000.50000.3000 1.0000000.0000 1.00000.800000.0000 1.00000.80000.50000.0000 1.000000.50000.0000 1.0000V ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦缩放前图形:缩放后图形:五、总结这次的课程设计主要是运用软件matlb来实现的。