计算机图形学-期末课程设计
计算机图形课程设计报告
计算机图形学课程设计学院: 信息工程学院专业: 计算机科学与技术学号:姓名:指导老师:时间:目录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属性,它决定计时器是否开始工作。
计算机图形学课程设计
计算机图形学课程设计一、课程目标知识目标:1. 让学生掌握计算机图形学的基本概念、基本原理和基本算法,如二维图形的表示、变换、裁剪和三维图形的建模、光照模型等。
2. 使学生了解计算机图形学在实际应用中的发展现状和前景,如虚拟现实、计算机辅助设计等。
3. 帮助学生建立计算机图形学与相关学科(如数学、物理、艺术等)的联系,提高跨学科素养。
技能目标:1. 培养学生运用计算机图形学知识解决实际问题的能力,如使用相关软件进行二维绘图、三维建模等。
2. 提高学生的编程能力,使其能够使用至少一种计算机图形学编程库(如OpenGL、DirectX等)实现基本图形绘制和动画效果。
3. 培养学生的团队协作能力和沟通表达能力,通过小组项目实践,共同完成具有一定难度的计算机图形学任务。
情感态度价值观目标:1. 激发学生对计算机图形学的兴趣,培养其主动探究、创新实践的精神。
2. 培养学生具有良好的审美观,能够从美学的角度评价和优化计算机生成的图形。
3. 强化学生的版权意识,尊重他人知识产权,遵循学术道德,树立正确的价值观。
本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,以便于后续的教学设计和评估。
通过本课程的学习,期望学生能够掌握计算机图形学的基础知识,提高实际操作技能,培养良好的情感态度价值观。
二、教学内容1. 计算机图形学基本概念与历史:介绍计算机图形学的定义、发展历程、应用领域及发展趋势。
- 教材章节:第一章 计算机图形学概述- 内容安排:1课时2. 二维图形的表示与处理:讲解二维图形的数学表示、几何变换、裁剪算法等。
- 教材章节:第二章 二维图形处理- 内容安排:4课时3. 三维图形的建模与渲染:介绍三维图形的建模方法、光照模型、纹理映射等。
- 教材章节:第三章 三维图形处理- 内容安排:5课时4. 计算机动画与视觉效果:探讨计算机动画原理、关键帧动画、粒子系统等视觉效果技术。
- 教材章节:第四章 计算机动画与视觉效果- 内容安排:4课时5. 计算机图形学编程实践:学习计算机图形学编程库(如OpenGL、DirectX 等)的基本使用,完成二维和三维图形绘制实例。
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样条曲线。
计算机图形学课程设计
《计算机图形学》课程设计报告学院:专业:班级:姓名:学号:指导教师:年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 样条曲线控制多边形。
计算机图形学课程设计报告
课程设计报告书设计名称:计算机图形学课程设计题目:画图程序的实现学生姓名:专业:计算机科学与技术(网络技术)班别:学号:指导老师:绘图小工具此绘图工具可以画直线、椭圆、矩形、曲线,可动态改变画笔的大小,画笔风格有连笔、单笔、填充颜色、实线、虚线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 绘制抛物线根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。
计算机图形学课程设计完本
1中文摘要本次课程设计采用OpenGL来完成。
OpenGL是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。
OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
本次课程设计是在win7系统下VC++6.0中的win32环境中,通过使用OpenGL所提供的标准库函数,综合图形学里的坐标转换,投影变换,光照以及纹理等知识,实现一个简单的太阳系的运行状况。
该系统仅做演示使用,将只包括太阳,地球与月亮,并且不保证相关数据的设定准确性。
目录一、课程设计任务及要求 (1)二、需求分析 (1)三、系统设计 (1)四、详细设计 (2)4.1 初始化的设定 (2)4.2 光源的位置与观察位置的设定 (3)4.3 纹理映射的设置 (3)4.4 各星球球体的绘制 (5)4.5 星球公转轨道 (7)4.6 人机交互式的实现 (8)五、运行调试与分析讨论 (9)5.1 程序运行截图 (9)5.2 结果分析 (10)六、设计体会与小结 (11)七、参考文献 (12)一、课程设计任务及要求1.利用OpenGL创建太阳,地球,月亮三个球体。
2. 实现“月亮绕着地球转,地球绕着太阳转”。
3. 为太阳,地球,月亮附上不同的纹理。
4. 具有较好的动画效果,消除闪烁现象。
5. 其他功能的添加。
二、需求分析本次课程设计使用的编译软件为Visual C++ 6.0。
设计中通过调用OpenGL函数库以来完成太阳,月亮,地球的球体绘制与纹理的加载,通过矩阵的变换以实现星球的运动效果。
从而模拟出太阳系的运行效果动画。
在之后,加入星球的轨道轨迹,使得模拟系统3D效果更加明显。
并加入人机交互操作。
通过“q,w,e,s,a,d”键来调整观察视角,可以实现全方位对此系统进行观察,使系统具有一定的可操作性。
三、系统设计本次课题为:实现太阳系运行动画。
系统设计步骤为:1.太阳,地球,月亮三个球体的创建。
2.利用坐标矩阵变换表示出三个球体之间的关系,即:地球绕着太阳转,月亮绕着地球转。
计算机图形学课设报告
计算机图形学课程设计报告专业:班级:学号:姓名:指导教师:[设计题目] :计算机图形学设计与实现[设计地点]: 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)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. 根据设计任务,编制程序,在机器上调试运行,并通过上机考核。
2. 按照下面的“三、课程设计报告格式”的要求,写出课程设计报告。
3. 课程设计报告在第19周之前交来。
二、 设计任务1.1)给定直线的起点坐标为P0(x0,y0)、终点坐标为P1(x1,y1),容易计算出直线斜率k 。
假设0≤k ≤1,则x 方向为主位移方向,绘制直线的递推公式为:,这称为数值微分法(Digital Differential Analyzer ,DDA ),请编程实现之。
提示:DDA 算法实质上是对直线斜率进行了四舍五入计算。
2)椭圆的扫描转换。
2.用鼠标在屏幕上绘制任意顶点数的封闭多边形并填充,填充效果如下图所示。
编程要求:⑴多边形的顶点数不受限制;⑵按下鼠标左键,拖动鼠标绘制多边形,同时按下Shift 键可以绘制水平边或垂直边; ⑶单击鼠标右键闭合多边形; ⑷使用边缘填充算法填充多边形。
⎩⎨⎧+=+=++k y y x x i i i i 1113请按照图所示,使用对话框输入直线的起点和终点坐标。
在窗口左侧区域绘制输入直线和“窗口”,在窗口右边右侧区域绘制“视区”并输出裁剪结果。
这里需要用到窗视变换的公式。
请分别用Cohen-Sutherland算法、中点分割裁剪算法和梁友栋-Barsky算法实现。
4在屏幕上使用鼠标绘制控制多边形,根据控制多边形的阶次绘制Bezier曲线和B样条曲线。
5.1)使用VC编程实现,以直角三角形为基础绘制下图所示Sierpinski三角形。
2)以屏幕范围为基础绘制下图所示Sierpinski地毯。
6.1)给定直线的起点颜色(如红色)和终点颜色(如黑色)不同,请使用中点Bresenham算法绘制任意斜率的颜色渐变直线,效果如图所示。
2)用梁友栋-Barsky算法裁剪线段P1(3,3),P2(-2,-1),裁剪窗口为wxl=0,wxr=2,wyb=0,wyt=2。
计算机图形学课程设计
目录一、课程设计任务及要求 (1)二、需求分析 (1)2.1 设计目标 (1)2.2 设计环境 (2)2.2.1 VC++6.0 (2)2.2.2 MFC (2)2.3 设计题目及要求 (2)三、总体设计 (3)3.1 绘图 (3)3.1.1 直线 (3)3.1.2 正三角形 (4)3.1.3 矩形 (4)3.2 变换类型 (5)3.2.1 平移变换 (5)3.2.2 比例变换 (6)3.2.3 旋转变换 (6)3.2.4 反射变换 (6)3.2.5 错切变换 (7)3.3 复位 (7)四、详细设计 (8)4.1 平移变换 (8)4.1.1 向左 (8)4.1.2 向右 (8)4.1.3 向上 (9)4.1.4 向下 (10)4.2 比例变换 (11)4.2.1 放大 (11)4.2.2 缩小 (12)4.3 旋转变换 (12)4.3.1 逆时针 (12)4.3.2 顺时针 (13)4.4 反射控制 (14)4.4.1 X轴 (14)4.4.2 Y轴 (15)4.4.3 原点 (15)4.5 错切变换 (16)4.5.1 X正方向 (16)4.5.2 X负方向 (17)4.5.3 Y正方向 (17)4.5.4 Y负方向 (18)五、运行调试与分析讨论 (20)六、设计体会与小结 (20)七、参考文献 (21)计算机图形学课程设计一、课程设计任务及要求利用VC++设计实现二维图形变换:1、学会使用VC++和MFC编写实现图形的绘制变换,需包括直线、正三角形、矩形的绘制和变换2、建立图形信息输入窗口,来输入图形的几何信息、拓扑信息和属性信息等3、建立图形变换参数输入窗口,来输入图形的基本几何变换参数4、熟练掌握平移变化、比例变换、、旋转变化、反射变换和错切变换。
5、其他功能:如复位、退出功能。
二、需求分析计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
计算机图形学课程设计----课程设计
计算机图形学课程设计学 院:计算机科学学院 班 级:学 号:学生姓名:指导教师: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所示。
计算机图形学课程设计
计算机图形学课程设计报告班级:学号:姓名:成绩:电子与信息工程学院计算机系一.目的与要求计算机图形学课程设计是计算机科学与技术(计算机软件)专业学生修完《计算机图形学》课程后实践教学中重要的一环,其目的是巩固所学的计算机图形学知识,进一步熟悉图形生成算法,掌握真实感图形学技术的基本方法和技能。
并能熟练运用VC++语言(或C语言或JA V A语言)计算机图形学知识实现设计内容。
基本要求:●按照课程设计要求提交计算机图形学课程设计报告;●完成系统的设计与开发;●设计必须根据进度计划按期完成。
二.设计内容及安排1.课程设计报告的基本内容(1)设计目的与要求(2)软件功能模块图(3)软件各模块功能介绍(4)程序代码清单(部分)(5)程序生成界面图形(部分)(6)参考文献2.课程设计程序将完成的基本功能题目一:人机交互式图形系统(1)用VC++语言(或C语言或JA V A语言)设计出人机交互式图形系统。
(2)在所设计的交互式图形系统上实现画直线功能和各种二次曲线生成功能。
(3)实现各种自由曲线(抛物线,Hermit 曲线,二、三次Bezier曲线,二、三次B样条曲线)的绘制功能。
(4)填充功能(矩形和圆的填充)。
(5)图形的各种二维几何变换。
(6)具有线段、多边形的裁剪功能。
(7)初步实现真实感图形的显示(8)以上严格按照交互技术及用户接口设计要求实现。
题目二:纹理映射及光照处理(1)对一个简单几何模型建模(2)将图片的纹理贴附到物体表面(3)对设计出的图像进行明暗(光照)、阴影等处理(4)给出至少2个视角的图像题目三:场景设计(1)采用真实感图形学技术设计一个自然场景(2)模拟出水、云、山体、光线至少三种景物(3)实现场景的漫游以上三道题目任选其中一种。
3.课程设计安排计算机图形学课程设计共计1周内完成。
第l~2天进行软件功能及功能模块的详细设计,第3~6天完成图形系统的程序设计,第7天上交课程设计报告。
计算机图形学课程设计
计算机图形学课程设计计算机图形学是计算机科学领域的一个重要分支,主要研究如何利用计算机生成、显示和操作图形图像的方法和技术。
在现代社会中,计算机图形学的应用已经相当广泛,包括动画制作、游戏开发、虚拟现实等领域。
因此,学习计算机图形学课程对于计算机相关专业的学生来说至关重要。
一、课程介绍计算机图形学课程主要包括基本概念、算法原理、图形学编程等内容。
学生将学习到图形学基础知识,掌握计算机图形学的基本原理和算法,培养图形图像处理的能力。
通过实际的编程项目,学生将能够将所学知识应用到实际项目中,提高自己的编程能力和创造力。
二、课程内容1. 图形学基础知识:包括图形学的定义、发展历史、基本概念和术语等;2. 图形学算法原理:学习常见的图形学算法,如光栅化、三维变换、光照模型等;3. 图形学编程实践:通过编程实践项目,实现简单的图形图像处理功能,加深对图形学原理的理解;4. 课程设计项目:进行一个综合性的课程设计项目,结合所学知识完成一个小型的图形学应用程序。
三、课程设计要求1. 熟悉图形学的基本知识和算法原理;2. 掌握图形学编程的基本技能,能够独立完成简单的图形学编程任务;3. 完成课程设计项目,提出合理的设计方案,实现自己的想法,并能够进行有效的展示和演示。
四、课程评估方式1. 平时成绩:包括上课表现、作业完成情况、参与讨论等;2. 期中考试:考察学生对于基本概念和算法原理的理解;3. 课程设计项目成绩:综合考察学生的综合能力和创造力;4. 期末综合考试:考察学生对于整个课程知识体系的掌握程度。
五、课程设计的意义和价值计算机图形学课程设计是对所学知识的一个综合应用和实践,通过设计和实现一个完整的图形学应用程序,学生将会提高自己的创造力和动手能力,培养解决实际问题的能力。
同时,课程设计项目也是对学生综合能力的一个考察和锻炼,能够提高学生的编程技能和团队协作能力,为将来从事相关行业打下坚实的基础。
综上所述,计算机图形学课程设计是一门非常重要的课程,通过学习这门课程,学生将能够掌握计算机图形学的基本原理和算法,提高自己的编程能力和创造力,为将来的职业发展奠定良好的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图形学课程设计报告题目:系别:班级:学号:姓名:指导老师:目录诚信说明......................................................................................................... 错误!未定义书签。
目录 .. (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的画图软件和图片处理软件的发展也日新月异,因此产生了制作一个类似的画图软件;而且通过制作该程序还能更好的学习图形学编程知识。
通过一个学期的学习,对于图形学的知识也有了些了解!为了更好的巩固和运用所学的知识,希望通过设计一个基于MFC的画图软件,达到自己想要的结果!二、项目需求2.1需求分析随着计算机科学技术的发展,近30年来,计算机图形学得到迅猛发展,人们可以通过计算机高速,有效,真实的生成图形,计算机图形学作为利用计算机生成图形的技术,已经越来越广泛地在各个领域得到了应用。
计算机图形学应用水平的提高和应用领域的拓宽,使得人们越来越重视对计算机图形学的研究和利用。
因此,通过一个学期有关图形学课程的学习之后,为了巩固所学的知识,将所学的知识运用到实践中,我决定设计一个小型画图软件,可以实现简单的画图功能和图片存储,编辑功能。
2.2功能描述通过一个学期图形学课程的学习,基于所学的知识,我设计了一个简单的画图软件,该软件主要具备以下几个功能:1、画图功能:点击画图菜单,可以选择画直线,画圆,或者填充;也可以通过菜单下面的快捷键直接实现以上功能。
2、选择算法的功能:由于课本上介绍的算法比较多,经过总结分类之后,我添加了一个算法选择的功能,可以通过单击算法,选择画图时采用不同的算法来实现相同的画图操作。
3、画图方式:考虑到交互功能,我设计了画图方式的功能,用户可以选择鼠标画图或者对话框画图,都能达到做要求的目的。
4、图像变换:基于所学的基本几何变换,我设计和该图像变换功能,可以实现图形的平移,旋转和伸缩等操作。
三、项目设计3.1直线扫描算法3.1.1 DAA扫描线算法直线DDA算法就是取直线起点(x0,y0)作为初始坐标,x每递增1,通过公式:yi+1=yi+kdx 计算出y轴坐标。
直线DDA算法也称数值微分算法。
直线DDA算法的本质,是用数值方法解微积分方程,通过同时对X,y各增加一个小增量,计算出下一步的x,y的值,以此确定该点的位置及属性。
最后画出直线。
3.1.2 中点扫描线算法假设x轴坐标为xi的与直线最近的像素已经决定为P(xi,yi),则下一个与直线最接近的像素只能是正右方的P1(xi+1,yi)或右下方的P2(xi+1,yi+1).以M(xi+1,yi+0.5)表示p1与p2的中点,用Q表示该直线与x=xi+1直线的交点。
当M在Q的下方,取P2为下一个直线上的点;当M在Q的上方,取P1为下一个直线上的点。
这是中点画线算法的基本思想。
中点画线算法得实现,关键是判断M和Q的位置关系。
直线方程采用隐式方程表示为F (x,y)=ax+by+c=0,将M坐标带入方程,判断di=F(Mi)=F(xi+1,yi+0.5)的大小。
当di>0时,则下一像素的判别式为d i+1=F(xi+2,yi+0.5)=di+a;当di<0时,则下一像素的判别式为d i+1=F(xi+2,yi+1.5)=di+a+b。
d0=F(x0+1,y0+0.5)=a+0.5b。
其中,a=y0-y1,b=x1-x0,c=x0y1-x1y0.3.1.3 Bresenham扫描线算法假设已经确定的像素为P(xi,yi),那么下一个可选择的像素点为P1(x i+1,y i)和P2(x i+1,y i+1)中的一个。
用Q表示该直线与x=xi+1直线的交点,Q点到P1(x i+1,y i)和P2(x i+1,y i+1)的距离分别为a1,a2,则有a1-a2=2k(xi+1)-2yi+2b-1.当a1>a2,下一像素点应取P2;当a1<a2,下一像素点应取P1;当a1=a2,可取两个像素点中的任意一个。
为了简化a1-a2,利用新变量di=Δx(a1-a2)=2Δy*xi-2Δx*y i+1+C,其中,C为后面的常量。
d i+1=2Δy*x i+1-2Δx*y i+1+C.故d i+1-di=2Δy-2Δx(y i+1-y i).当di>=0时,d i+1=di+(2Δy-2Δx),当di<0时,d i+1=di+2Δy。
d0=2Δy-Δx。
3.2圆的扫描算法3.2.1 中点画圆扫描算法中点画圆算法从点(0,R)至(R/2, R/2)的1/8圆周顺时针的确定最佳逼近与圆弧的像素序列。
假设已经确定的像素为P(xi,yi),那么下一个可选择的像素点为P1(xi+1,yi)和P2(xi+1,yi-1)中的一个。
构造原函数为F(x,y)=x2+y2-R2对于圆上的点(x,y),有F(x,y)=0;对于圆外的点(x,y),有F(x,y)>0;对于圆内得点(x,y),有F(x,y)<0.构造判别式di=F(Mi)=(xi+1)2+(yi-0.5)2-R2.若di<0,则取P1,下一个像素的判别式为d i+1=F(xi+2,yi—0.5)=di+2xi+3;若di>=0, 取P2,下一个像素的判别式为d i+1=F(xi+2,yi—1.5)=di+2(xi-yi)+5.d0=1.25-R。
用ei=di-0.25代替di,若ei>=0,取P1为下一像素,e的增量为2xi+3;若ei<0,取P2为下一像素,e的增量为2xi-2yi+5.3.2.2 Bresenham画圆扫描算法假设已经确定的像素为P(xi,yi),那么下一个可选择的像素点为Hi(x i+1,y i)和Di(x i+1,y i-1)中的一个。
分别计算这两点到圆周的距离,即|Б(Hi)|=|(xi+1)2+yi2-R2|,|Б(Di)|=|(xi+1)2+(yi-1)2-R2.引判别式di=Б(Hi)+Б(Di)=[(xi+1)2+yi2]-R2+[(xi+1)2+(yi-1)2]-R2.如果di<0,取Hi,则下一点(xi+1,yi)的判别式为di+1=Б(Hi+1)+Б(Di+1)=d+4xi+6;如果di>0,取Di,则下一点为(xi+1,yi-1)的判别式为di+1=Б(Hi+1)+Б(Di+1)=d+4(xi-yi)+10.初值d0=Б(H0)+Б(D0)=3-2R。
3.3种子填充算法种子填充算法可以采用递归算法。
递归的基本方法是设种子像素为(x,y)是四向连通区域内的一点,old_color为区域内的原有像素颜色,new_color是要填充的颜色,递归填充的过程是如果种子像素是区域内的原有颜色old_color,说明该种子像素在区域内,则像素置为被填充颜色new_color,同时将种子像素的上、下、左、右像素当作种子递归调用填充递归算法;否则说明该像素已被填充,不再处理。
3.4图形的基本几何变换算法3.4.1平移平移变换是将对象从一个位置(x,y)移到另一个位置(x1,y1)的变换。
tx,ty称为平移距离,tx=x1-1,ty=y1-y 。
得到平移变换公式:x1=x+tx ;y1=y+ty 。
3.4.2旋转旋转变换是以某个参考点为圆心,将对象上的各点(x ,y )围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1)的变换,当参考点为(0,0)时,旋转变换的公式为: X1=x*cos θ-y*sin аY1=y*cos θ+x*sin а3.4.3伸缩比例变换是使对象按比例因子(sx ,sy )放大或缩小的变换。
X1=x*sx ,y1=y*sy 。
当(sx ,sy )取特定值时,比例变换可看作是将图形按x 轴或者y 轴或者原点对称。
3.5 Bezier 曲线算法Bezier 曲线是由多项式混合函数推导出来的,对于给定空间n+1个点的位置向量Pk(k=0,1,2…,n)可定义一个n 次Bezier 参数曲线,其各点坐标的插值公式是P(t)=∑=nk t n PkBENk 0)(, [0,1]Эt其中,Pk 构成该曲线的特征多边形,BENk,n(t)是n 次Bernstein 基函数。
四、项目效果画图软件主界面包括菜单栏和快捷键两部分:菜单栏主要有文件,画图,算法,画图方式和图形变换几个功能。
在文件中可以实现新建,打开,保存和另存为图片的功能。
画图中可以选择所需要的实现的图形,比如直线,圆以及填充和曲线等。
对应于画图中不同的图形,用户还可以选择不同的画图算法。
为了增强交互功能和多样性,我们还结合了不同的画图方式,常用的是鼠标画图和坐标画图。
选择坐标画图时会有对应的对话框弹出,提示用户输入相应的数据。
在图形变换中,用户可以选择图形平移和旋转。
快捷键主要包括画直线,画圆和填充以及颜色的选取的功能。
主要方便用户实现画图的功能。
主要界面如下(1)画线:坐标输入画线鼠标拖动画线(2)画圆(3)填充(4)Bezier曲线(5)几何变换平移旋转五、项目总结这学期刚开始的时候,由于课程比较少,所以空闲的时间很多。