计算机图形学实验报告_第1页
计算机图形学实验报告_第2页
计算机图形学实验报告_第3页
计算机图形学实验报告_第4页
计算机图形学实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机图形学实验报告1、 画直线:改进的Bresenham算法1、 程序实现环境计算机硬件配置:EasyX绘图库,VC+6.0操作系统:64位Windows7旗舰版编程语言:C2、 算法思想各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素。算法步骤:A. 输入直线的两端点P0(x0,y0)和P1(x1,y1)。B. 计算初始值x、y、e=-x、x=x0、y=y0。C. 绘制点(x,y)。D. e更新为e+2y,判断e

2、的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2x;否则(x,y)更新为(x+1,y)。E. 当直线没有画完时,重复步骤3和4。否则结束。3、 程序使用方法用VC+6.0直接编译、链接、运行即可,如需要更改测试数据,可在源代码上更改,不接受输入数据。4、 实验结果及分析合法用例1:(-100,-200)(250,100),图如下实验程序的适用范围:不论斜率如何,对于任意两点均可生成一条直线,包括斜率为0或无穷。但如果点的范围超过初始化绘图区600*600,则发生截断。测试情况:合法用例2:(0,100)(200,0),图如下合法用例3:(0,100)(0,-200)(

3、斜率为无穷),图如下不合法用例1:(0,100)(400,0)(即超过600*600的绘图区域,发生了截断,原点(300,300)图如下2、 画圆:中点Bresenham算法1、程序实现环境计算机硬件配置:EasyX绘图库,VC+6.0操作系统:64位Windows7旗舰版编程语言:C2、算法思想Bresenham画圆算法又称中点画圆算法,与Bresenham直线算法一样,其基本的方法是利用判别变量来判断选择最近的像素点,判别变量的数值仅仅用一些加、减和移位运算就可以计算出来。为了简便起见,考虑一个圆心在坐标原点的圆,而且只计算八分圆周上的点,其余圆周上的点利用对称性就可得到。故只需要知道圆上

4、的一个点的坐标(x,y),利用八对称性,就能得到另外七个对称点的坐标。Bresenham画圆算法是用一系列离散的点来近似描述一个圆。算法步骤:A. 1.输入圆的半径R。B. 计算初始值d=1-R、x=0、y=R。C. 绘制点(x,y)及其在八分圆中的另外七个对称点。D. 判断d的符号。若d0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。E. 当xy时,重复步骤3和4。否则结束。3、 程序使用方法用VC+6.0直接编译、链接、运行即可,如需要更改测试数据,可在源代码上更改半径R的值,不接受输入数据。

5、4、实验结果及分析合法用例1:R=100,图如下实验程序的适用范围:对于所有的0R=边界,均可生成一个完整的圆。如果R边界点,则因为R范围超过初始化绘图区域,故发生截断。测试情况:合法用例:2:R=300(边界),图如下不合法用例1:R=350(超过边界发生截断),图如下不合法用例2:R=0(无显示),图如下3、 Bezier曲线1、程序实现环境计算机硬件配置:EasyX绘图库,VC+6.0操作系统:64位Windows7旗舰版编程语言:C2、算法思想(1)绘制三次Bezier曲线:Bezier曲线是参数多项式曲线,它由一组控制多边形的顶点唯一定义。在控制多边形的各个顶点中,只有第一个和最后一

6、个顶点在曲线上,其他的顶点则用以定义曲线的导数、阶次和形状。给定n+1个控制顶点Pi(i=0n) ,则Bezier曲线定义为:P(t)=Bi,n(t)Pi t0,1其中:Bi,n(t)称为基函数。Bi,n(t)=Ci nti (1-t)n-i,Ci n=n!/(i!*(n-i)!)三次Bezier曲线(n=3):(2)两段三次Bezier曲线的拼接:有两段Bzier曲线P1(t)和P2(t),其控制多边形顶点分别为P0、P1、P2、P3和Q0、Q1、Q2、Q3,并且有P3=Q0,为了实现G1连续,需有P3-P2=a(Q1-Q0),其中a为比例因子,故实现G1连续的条件是P3和Q0、Q1在同一条

7、直线上,并且P2和Q1应该分部在P3(Q0)的两侧.3、程序使用方法用VC+6.0直接编译、链接、运行即可,如需要更改测试数据,可在源代码上更改,不接受输入数据。运行后回车即结束。4、 实验结果及分析(1) 绘制三次Bezier曲线:合法用例1:(50,400),(140,20),(400,40),(535,420)实验程序的适用范围:对于所有的0= P(x,y) =边界,均可生成一个三次Bezier曲线。如果P(x,y)边界点,则因为点范围超过初始化绘图区域,故发生截断,显示不完全,边界为600*600测试情况:合法用例2:(200,400),(140,20),(400,40),(335,1

8、20),图如下不合法用例1:(-150,400),(140,-100),(400,40),(535,420),图如下(2) 三次Bezier曲线的拼接:合法用例1:P1(50,200),P2(140,20),P3(300,40),P4(350,140)Q1(350,140),Q2(500,440),Q3(600,340),Q4(650,50)实验程序的适用范围:对于所有的0= P(x,y),Q(x,y)=边界(700*600) ,当且仅当P2、P3(Q0)、Q1在同一条直线上时,才可生成一个三次Bezier曲线。如果(x,y)边界点,则显示不完全;如果P2、P3(Q0)、Q1不在同一条直线上,

9、则拼接出来的线不是三次Bezier曲线。测试情况:合法用例2:P1(200,400),P2(140,20),P3(400,40),P4(350,140)Q1(350,140),Q2(300,240),Q3(600,340),Q4(650,50)不合法用例1:P1(50,200),P2(140,20),P3(300,40),P4(350,140)Q1(350,140),Q2(500,140),Q3(600,340),Q4(650,50)(P2、P3(Q0)、Q1不在同一条直线上,则拼接出来的线不是三次Bezier曲线)4、 线段的编码裁剪算法1、程序实现环境计算机硬件配置:EasyX绘图库,VC

10、+6.0操作系统:64位Windows7旗舰版编程语言:C2、算法思想算法思想这种算法利用编码的方法,延长窗口边线,使得它们把包含未经裁剪图形的窗口平面区域分成九个区域,如下图所示:顶边线底边线左边线右边线每个区域用一个4位编码CtCbCrCl来表示,代码中每一位分别是0或1,是按照窗口边线来确定的,下面给出具体的编码规则,其中最右边的位Cl是第一位,依次Cr第二、Cb第三、Ct第四位。则:第一位Cl置为1该端点位于窗口左侧;第二位Cr置为1该端点位于窗口右侧;第三位Cb置为1该端点位于窗口下侧;第四位Ct置为1该端点位于窗口上侧;否则,相应位置置为0Cohen-Sutherland直线裁减算

11、法的步骤如下: (1)当两端点P1(x1,y1)和P2(x2,y2)在区域0000中,即满足点的裁剪不等式: 则两端点代码C1=C2=0表示均在窗口内,应全部保留。(2)当两个端点在窗口边线外的同侧位置,则他们的四位代码中,有一相同位,同时位“1”,显然两个端点代码C1和C2按位与运算 C1&C20 .由此可检查判断直线在窗口外,应全部舍弃。(3)如果直线两端点不满足上述两种情况,不能简单地全部保留或全部舍弃直线时,则需要计算出直线与窗口边线的交点,将直线分段后继续进行检查判断。这样可以逐段地舍弃位于窗口外地线段,保留剩余在窗口内的线段。3、程序使用方法用VC+6.0直接编译、链接、运行,运行

12、时先输入直线的两个端点的坐标,再按enter,显示窗口和未裁剪的线段,再按enter,显示窗口和裁剪后的线段。如果要修改数据,在运行后输入即可。4、实验结果及分析合法用例1:(10,50),(500,360)实验程序的适用范围:对于所有的0= (x,y)=边界(600*500) ,均可以实现线段裁剪。如果(x,y)边界点,则裁剪前的线段显示不完全,但并不妨碍裁剪。测试情况:合法用例2:(40,190),(210,300),图如下合法用例3:(100,100),(250,170),图如下不合法用例1:(-100,0)(200,100)(因为点的坐标超过边界点,故裁剪前的线段显示不完全,但并不妨碍

13、裁剪。),图如下5、 小结经过这次代码实践,我觉得对图形学领悟得更加深刻了。尤其是看到自己辛辛苦苦编写的代码运行成功,那感觉太美好了。在用改进的Bresenham算法画直线时,开始只会画0=k=1的情况,后来认真琢磨,举一反三后才推导出后续的k适用于所有范围时的情况,这个过程很艰辛,但是我很开心,这是求知与实践的过程,我也为自己感到骄傲。其实我始终认为,画直线、花园、裁剪等等算法都是很经典的算法,我们必须理解掌握,只有站在前人的肩膀上,我们才能做出更大的发展。我对3D也很感兴趣,而3D中的特效归根结底,也是由一条条直线、一个个圆圈等基本元素构成的,只有打好了图形学的基础,我们才能在这个领域走得更快更稳。对于图形学大作业,我觉得老师还可以再让我们做一个类似于综合课设的东西,将所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论