计算机图形学课程教学设计报告简单图形的绘制

合集下载

111级计算机图形学课程设计

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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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来实现的。

相关文档
最新文档