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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

西安石油大学计算机图形学实验报告.docx

1、西安石油大学计算机图形学实验报告实验报告计算机图形学实验大作业 课程名称 计算机图形学 实验名称 二维绘图系统与计算机动画 姓 名 学 号 专业班级 成 绩 指导教师 爨莹 实 验 报 告课程名称 计算机图形学 实验名称 二维绘图系统 姓 名 学 号 专业班级 实验日期 2015 年 12 月 8 日 成绩 指导教师 爨莹 一、实验目的 本实验为设计和开发一个小型的二维绘图系统。通过图形软件的设计开发和上机实验,巩固所学图形学基本知识,掌握交互式图形系统的设计方法,熟悉并掌握有关图形图象编程语言、工具和类库的使用。二、实验环境 Win 8 操作系统 + VC 6.0 开发平台三、实验内容与步骤

2、1、算法原理(1)DDA算法画直线原理 DDA算法是根据直线的微分方程来计算x或y生成直线的扫描转换算法。 在一个坐标轴上以单位间隔对线段取样, 以决定另一个坐标轴方向上最靠近理想线段的整数值。 设(x0, y0)为直线段的始点, (x1, y1)为直线段的终点, 且端点坐标均为整数, 则直线的微分方程为设|k|1, 则有 yi+1=kxi+1+b=k(xi+x)+b=yi+kx上式表明, 若x=1, 则当x每递增1时, y递增k。 扫描转换开始时, 取直线始点(x0, y0)作为初始坐标。(2)中点Bresenham算法画直线原理Bresenham画线算法与中点画线法有相似之处, 也是通过在

3、每列像素中确定与理想直线最近的像素来进行直线的扫描转换的。 为了讨论的方便,不妨也假定直线的斜率在01之间。 如图所示, 过各行、 各列像素中心构造一组虚拟网格线, 按直线从起点到终点的顺序计算直线与各垂直网格线的交点, 然后确定该列像素中与该交点最近的像素。 Bresenham算法误差项d的几何意义(3)中点Bresenham算法画圆算法原理为了讨论的方便, 我们考虑中心在原点, 半径为R的圆的第二个八分圆弧, 圆的其它部分可通过一系列的简单的反射变换得。也就是讨论如何从(0, R)到 (R / ,R/ )顺时针确定最佳逼近于该圆弧的像素序列。 中心在原点, 半径为R的圆的方程为x2+y2=

4、R2 若令F(x,y)=x2+y2-R2, 则上述方程为 F(x, y)=0如图所示, 假定x坐标为xP的像素中最佳逼近理想圆弧的为P(xP, yP), 那么, 下一个像素只能是正右方的P1(xP+1, yP)或右下方的P2(xP+1, yP-1)两者之一。 引入P1和P2的中点M(xP+1, yP-0.5), 当M在圆内时, 应取P1(xP+1, yP)为下一个像素, 否则, 应取P2(xP+1, yP-1)为下一个像素。 为此, 构造判别式 d=F(M)=F(xP+1, yP-0.5)=(xP+1)2+(yP-0.5)2-R2 中点画圆法若d0, 则应取P1(xP+1, yP)为下一个像素

5、, 而且再下一个像素的判别式为 d=F(xP+2, yP-0.5)=(xP+2)2+(yP-0.5)2-R2=d+2xP+3而d0, 则应取P2(xP+1, yP-1)为下一个像素, 而且再下一个像素的判别式为 d=F(xP+2, yP-1.5)=(xP+2)2+(yP-1.5)2-R2 =d+2(xP-yP)+5由于第一个像素是(0,R), 因而d的初始值为 d0=F(1, R-0.5)=1.25-R (4)中点bresenham算法画椭圆原理中点画圆法可以推广到一般二次曲线的生成, 下面以中心在原点的标准椭圆的扫描转换为例说明。 设椭 圆的方程为 F(x,y)=b2x2+a2y2-a2b2

6、=0其中, a为沿x轴方向的长半轴长度, b为y轴方向的短半轴长度, a、 b均为整数。 不失一般性, 我们只讨论第一象限椭圆弧的生成。需要注意的是, 在处理这段椭圆时, 必须以弧上斜率为-1的点(即法向量两个分量相等的点)作为分界把它分为上部分和下部分, 如图所示。 第一象限的椭圆弧 该椭圆上一点(x, y)处的法向量为 其中, i和j分别为沿x轴和y轴方向的单位向量。 从图3.6可看出, 在上部分, 法向量的y分量更大, 而在下部分, 法向量的x分量更大, 因而, 在上部分若当前最佳逼近理想椭圆弧的像素(xP,yP)满足下列不等式 b2(xP+1)a2(yP-0.5) 而确定的下一个像素不

7、满足上述不等式, 则表明椭圆弧从上部分转入下部分。 在上部分, 假设横坐标为xP的像素中与椭圆弧更接近点是(xP, yP), 那么下一对候选像素的中点是(xP+1, yP-0.5)。 因此判别式为 d1=F(xP+1, yP-0.5)=b2(xP+1)2+a2(yP-0.5)2-a2b2 若d1DDA直线 int x0=10,y0=150,x1=150,y1=100; int x,y; float dx,dy,k; dx=(float)(x1-x0); dy=(float)(y1-y0); k=dy/dx; y=y0; if(abs(k)1) for(x=x0;xSetPixel(x,int(

8、y+0.5),RGB(255,0,0); y=y+k; if(abs(k)=1) for(y=y0;ySetPixel(int(x+0.5),y,RGB(0,0,288); x = x + 1/k; ReleaseDC(pDC)2中点Bresenham算法直线 CDC* pDC=GetDC(); int x1=10, y1=20, x2=550, y2=400,c=RGB(255,0,0); int i,s1,s2,interchange; float x,y,deltax,deltay,f,temp; x=x1; y=y1; deltax=abs(x2-x1); deltay=abs(y2-

9、y1); if(x2-x1=0) s1=1; else s1=-1; if(y2-y1=0) s2=1; else s2=-1; if(deltaydeltax) temp=deltax; deltax=deltay; deltay=temp; interchange=1; else interchange=0; f=2*deltay-deltax; pDC-SetPixel(x,y,c); for(i=1;i=0) if(interchange=1) x+=s1; else y+=s2; pDC-SetPixel(x,y,c); f=f-2*deltax; else if(interchan

10、ge=1) y+=s2; else x+=s1; f=f+2*deltay; (2)画圆1中点Bresenham算法画圆CDC* pDC=GetDC(); int xc=200, yc=110, radius=100, c=0; int x=0,y=radius,p=3-2*radius; while(xSetPixel(xc+x, yc+y, c); pDC-SetPixel(xc-x, yc+y, c); pDC-SetPixel(xc+x, yc-y, c); pDC-SetPixel(xc-x, yc-y, c); pDC-SetPixel(xc+y, yc+x, c); pDC-Se

11、tPixel(xc-y, yc+x, c); pDC-SetPixel(xc+y, yc-x, c); pDC-SetPixel(xc-y, yc-x, c); if (pSetPixel(xc+x, yc+y, c); pDC-SetPixel(xc-x, yc+y, c); pDC-SetPixel(xc+x, yc-y, c); pDC-SetPixel(xc-x, yc-y, c); pDC-SetPixel(xc+y, yc+x, c); pDC-SetPixel(xc-y, yc+x, c); pDC-SetPixel(xc+y, yc-x, c); pDC-SetPixel(xc

12、-y, yc-x, c);2系统画圆pDC-SetViewportOrg(230,110) ; pDC-Ellipse(-90,90,90,-90) ; break;(3)画椭圆1中点Bresenham算法画椭圆CDC* pDC=GetDC(); int a=200,b=100,xc=700,yc=110,c=0; int x,y; double d1,d2; x=0;y=b; d1=b*b+a*a*(-b+0.25); pDC-SetPixel(x+300,y+200,c); pDC-SetPixel(-x+300,y+200,c); pDC-SetPixel(x+300,-y+200,c)

13、; pDC-SetPixel(-x+300,-y+200,c); while(b*b*(x+1)a*a*(y-0.5) if(d1SetPixel(x+xc,y+yc,c); pDC-SetPixel(-x+xc,y+yc,c); pDC-SetPixel(x+xc,-y+yc,c); pDC-SetPixel(-x+xc,-y+yc,c); d2=sqrt(b*(x+0.5)+a*(y-1)-a*b; while(y0) if(d2SetPixel(x+xc,y+yc,c); pDC-SetPixel(-x+xc,y+yc,c); pDC-SetPixel(x+xc,-y+yc,c); pD

14、C-SetPixel(-x+xc,-y+yc,c); 2系统画椭圆 pDC-SetViewportOrg(600,190); pDC-Ellipse(0,0,200,150); break;(4)图形基本变换 1母图 float a43=-100,-100,1,-20,100,1,170,0,1,100,-120,1; int i; pDC-MoveTo(int(a30),int(a31); for(i=0;iLineTo(int(ai0),int(ai1); 2基本变换以平移为例:float a43=-100,-100,1,-20,100,1,170,0,1,100,-120,1; floa

15、t b 3=1,0,0,0,1,0,-100,-100,1; float c43; int i; pDC-MoveTo(int(a30),int(a31); for(i=0;iLineTo(int(ai0),int(ai1); JuZhenCheng(a,b,c,3,4); /列,行 CPen pen(PS_SOLID,1,RGB(255,0,0); CPen * pOldPen=pDC-SelectObject(&pen); pDC-MoveTo(int(c30),int(c31); for(i=0;iLineTo(int(ci0),int(ci1); pDC-SelectObject(pO

16、ldPen);当需要其他变换时,只需要按照原理将float b3中的矩阵数列进行改即可得到相应的基本图形变换。四、实验结果 基本界面 基本直线绘制 Bezier曲线绘制 三次B样条曲线绘制 DDA直线绘制 图形变换母图 平移变换 旋转45 旋转90 旋转180 原点对称 关于X轴对称 关于Y轴对称 关于Y=X对称 关于Y= -X对称 错切变换 比例变换 系统画圆 系统画椭圆 中点Bresenham算法画圆 中点Bresenham算法画椭圆实 验 报 告课程名称 计算机图形学 实验名称 计算机动画 姓 名 学 号 专业班级 实验日期 2015 年 12 月 1 日 成绩 指导教师 爨莹 一、实验目的 本实验基本部分为设计和开发一个计算机动画,通过软件的设计开发和上机实验,巩固所学图形学基本知识,掌握交互式图形系统的设计方法,熟悉并掌握有关图形图象编程语言、工具和类库的使用。二、实验环境Win 8操作系统 + Flash 6.0三、实验内容与步骤 1、素材准备:(1)图片 (2)音乐 (3)文字特效2、脚本编写:动画主题为战争与和平 , 3、动画效果: 四、实验结果

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

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