《《计算机图形学》的主要研究内容及发展趋势.docx》由会员分享,可在线阅读,更多相关《《计算机图形学》的主要研究内容及发展趋势.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、20232023 学年第一学期计算机图形学计算机图形学作业第一次作业计算机图形学的主要争论内容及进展趋势:图形通常由点、线、面、体等几何元素和灰度、颜色、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地 图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为 此,必需建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹 理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机关心几何设计有着 亲热的关系。事实上,图形学也把可以表
2、示几何场景的曲线曲面造型技术和实体造型技术作为其主要的争论内容。同时,真实感图形计算的结果是以数字图像的方式供给的,计算机图 形学也就和图像处理有着亲热的关系。图形与图像两个概念间的区分越来越模糊,但还是有区分的:图像纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。计算机图形学的争论内容格外广泛,主要有以下几个方面:计算机图形学的应用;计算 机图形设备和系统;国际标准化组织(ISO) 公布的图形标准;人机交互接口技术;根本图形实体、自由曲线和自由曲面的生成算法;图形变换和裁剪;曲面和实体造型算法;颜色、光照模型
3、及真实感图形显示技术与算法等内容。从计算机图形学目前学科进展来看,有以下几个进展趋势:与图形硬件的进展严密结合, 突破实时高真实感、高区分率渲染的技术难点;争论和谐自然的三维模型建模方法;利用日 益增长的计算性能,实现具有高度物理真实的动态仿真;争论多种高精度数据猎取与处理技 术,增加图形技术的表现;计算机图形学与图像视频处理技术的结合;从追求确定的真实感向追求与强调图形的表意性转变。其次次作业目的:上机实习1、在把握计算机图形学的根本原理、算法和实现技术的根底上,通过编程实现简洁的二维图形生成。2、培育综合运用计算机高级语言C 语言有关课程的学问去分析和解决实际问题的力气。以进一步稳固,深化
4、,扩展本课程所学到的理论学问。- 1 -20232023 学年第一学期计算机图形学3、通过计算机高级语言对图形程序的编写,调试,使学生把握图形程序编写的一般方法和步骤,以及计算机图形学在机械设计中的应用的根底学问,树立理论联系实际的正确设计思想和严谨的工作作风。试验一 DDA 算法生成直线原理:在图形设备上输出一条直线,是通过在应用程序中对每一条直线的端点坐标的描述,由 输出设备将一对端点间的路径加以描绘来实现的。对于水平线或垂直线,只要有了驱动设备 使之动作的指令,一般都能准确地画出。但对于任意斜率的直线,就要考虑算法了。因此大多数图形设备,都只供给驱动 x 方向和y 方向动作的信号。这两个
5、方向的信号用来指示绘图笔动作或电子束的偏移,或把握应赋值像素的地址。假设直线段AB 的端点坐标是x1,y1),x2,y2),且dy/dx=m=常数,明显可以推导出下面的递推公式:Dx = y2 - y1又由于yi+1= y + Dyi,所以Dyx2 - x11y2 - y1y= y +i+1iDyx2 - x12Dxy这样每增加一个增量,便可以按1计算出 i+1 。由于屏幕上的像素只能是整数,(int) x, (int) y因此要经过取整运算,即i+1i+1 处的像素点才是显示像素点。然而,乘法运算和取整运算都需要较多的时间,因此产生直线的速度会受到影响。明显,假设在式2中令Dx = 1,则可
6、以避开做费时的乘法,公式可以简化为y2 - y1y= y +i+1ix2 - x1这时要留意 m1 和 m1 的状况,那么在 X 方向增加一个步长,就有可能在 Y 方向构成一个比 1 大的步距。遇到这种状况,就应当把y 当做是自变量,每次增加一个单位步长 1,去计算因变量x,即y= y +1i+1i,DyDy = 1x= x+1x= xi+1i+ 1m+ Dx = x +imy由于,所以 ii。这样才不至于一次逃过多行。固然,也要对i+1 进展取整运算,再打算要显示的像素。这种状况如图 1 所示。假设是 m1图 2m1代码:#include #include #define N 10.0mai
7、nint drive,mode,x1,y1,x2,y2,dx,dy,tx,ty,i,j,k,n; float xinc,yinc,x0,y0;drive=DETECT; initgraph(&drive,&mode,“c:TC20BGI“); cleardevice;for(i=0;idy) n=dx;else n=dy;xinc=(float)dx/(float)n; yinc=(float)dy/(float)n; if(x1=x2&y1=y2) k=1;else if(x1x2&y1x2&y1y2) k=3;else if(x1y2) k=4;switch(k)case 1:tx=x1;
8、 x1=x2; x2=tx; ty=y1;- 3 -20232023 学年第一学期计算机图形学y1=y2; y2=ty; case 2:x0=x1/N+0.5; y0=y1/N+0.5;for(j=0;j=n;j+=N)circle(N*(int)x0,N*(int)y0,2); x0+=xinc;y0+=yinc;break; case 3:tx=x1; x1=x2; x2=tx; ty=y1; y1=y2; y2=ty; case 4:x0=x1/N+0.5; y0=y1/N+0.5;for(j=0;j=n;j+=N)circle(N*(int)x0,N*(int)y0,2); x0+=x
9、inc;y0-=yinc;getch; closegraph;总结:用 DDA 算法产生直线比较准确,而且规律简洁,易于用硬件实现。但是,要作动身运算,影响了算法的效率。试验二 Bresenham 算法生成直线Bresenham 算法原理:此算法的主要思想是借助于一个决策变量di 来确定该点亮的像素点。对于 0m 0 ,所以可以用(s - t)dx 0si- 4 -20232023 学年第一学期计算机图形学点亮的像素点的条件。由于s - t 0s,则表示 st。从图 3 中可以看出,在 st 时应选择 i 点。(s - t)dx = d定义i ,并称之为决策变量,那么di= 2(rdy - q
10、dx) + 2dy - dx;从图 3 中可以看出,r = xi-1 ,q = yi-1 ,是表示前面一个亮点的坐标值,因此可以写出决策变量di 的初值为di = 2xi-1dy - 2 yi-1dx + 2dy - dx。将下标加 1,则有di +1 = 2x dy - 2 y dx + 2dy - dxd- d = 2(x - x)dy - 2( y - y)dxx - x= 1ii,i+1iii-1ii-1, ii-1,d= d + 2dy - 2( y - y)dxi+1iii-1假设di 0图 3直线段与光栅网格TTy,则表示下一个亮点应中选 i 。一旦选择了 i ,则有 i= yi
11、-1+1,此时决di 0 的状况,假设是Dy Dx 0 的状况,则要把x 和y 的变量位置互换。对于Dy 0 或者是Dx 0 的状况,应当将表达式 y = y +1和 x = x + 1 换成y = y -1 或者 x = x -1。代码:#include #include #define N 10.0mainint drive,mode,x1,y1,x2,y2,dx,dy,tx,ty,x0,y0,i,h;drive=DETECT; initgraph(&drive,&mode,“c:TC20BGI“); cleardevice;for(i=0;ix2&y1y2)tx=x1; x1=x2; x
12、2=tx; ty=y1; y1=y2; y2=ty;if(dx=dy) while(x0x1)if(h0) h+=2*dy; elseh+=2*(dy-dx); y0+=N; x0+=N;circle(x0,y0,3);else if(dxdy) while(y0y1)if(hx2&y1=-dy) while(x0x1)if(h0) h+=2*dy; elseh+=2*(dy-dx); y0-=N;- 6 -20232023 学年第一学期计算机图形学 x0+=N;circle(x0,y0,3);else if(dx-dy) while(y0y1)if(h0) h+=2*dx; elseh+=2
13、*(dx-dy); x0+=N;y0-=N;circle(x0,y0,3);getch; closegraph;试验三 角度 DDA 算法生成圆弧原理:q任何圆都可用多边形来靠近,其边数越多,圆弧越光滑,但是边数太多会铺张绘图时间。为此,可以通过计算的方法来确定适当的边数。选取圆心角q ,q 相对应的正多边形与圆弧d = r(1- cos)之间拱高为d,这样,圆心角q1- drq = 2 arccos(1- d ) 2.8与圆半径r 之间的关系为:2 ,由此可解出圆心角r和多边形的边数n = 2p / n,式中 是对括号内数据取整。因此,只要给定了限差d 和半径r 就可算出n 和q 。这样,半
14、径为r 的圆可以角增量q ,按逆时针连续旋转计算出各点坐标并顺次连接的正n 边形取代。各点的坐标可按下式计算:isx = r cos(i *q) + x ;y = r sin(i *q) + y ;(i = 0,1,2,3n)ixy(x , ys)(x , y)(x , y )式中: i , i 为圆心坐标。画圆从 0以使圆周完全闭合。0开头,挨次连至 nn,再连续连至 00,在上述算法的根底上,当要绘制一段圆弧时,只需设计好起始角和终止角,即可绘制任一圆弧。代码:#include #include #include #define PI 3.1415926#define D 0.0001 m
15、ainint drive,mode,x0,y0,i=0,r,n; float x1,y1,a;scanf(“%d%d%d“,&x0,&y0,&r); drive=DETECT;- 7 -20232023 学年第一学期计算机图形学initgraph(&drive,&mode,“); cleardevice;setbkcolor(5); setcolor(3); putpixel(x0,y0,3); a=2.8*sqrt(D/r); n=2*PI/a; x1=r*cos(i*a)+x0; y1=r*sin(i*a)+y0; moveto(int)x1,(int)y1);for(i=1;i=n;i+
16、)x1=r*cos(i*a)+x0; y1=r*sin(i*a)+y0; lineto(int)x1,(int)y1); i=0;x1=r*cos(i*a)+x0; y1=r*sin(i*a)+y0; lineto(int)x1,(int)y1); getch;closegraph;试验四 逐点比较法插补圆弧原理:略代码:#include #include #define D 0.1#define N 10.0 mainint drive,mode,i,xc,yc,r,xi,yi,xe,ye,fi,ri; float dx,dy;drive=DETECT; initgraph(&drive,&
17、mode,“c:TC20BGI“); cleardevice;for(i=0;iD&abs(yi-ye)D)putpixel(xi,yi,2);- 8 -20232023 学年第一学期计算机图形学ri=(xi-xc)*(xi-xc)+(yi-yc)*(yi-yc); fi=ri-r*r;if(fi=0) xi-=dx; else yi+=dy;xi=xe; yi=ye; xe=xc-r; ye=yc;while(abs(xi-xe)D&abs(yi-ye)D)ri=(xi-xc)*(xi-xc)+(yi-yc)*(yi-yc); fi=ri-r*r;if(fi=0) yi-=dy; elsex
18、i-=dx; putpixel(xi,yi,3);xi=xe; yi=ye; xe=xc; ye=yc-r;while(abs(xi-xe)D&abs(yi-ye)D)ri=(xi-xc)*(xi-xc)+(yi-yc)*(yi-yc); fi=ri-r*r;if(fi=0) xi+=dx; elseyi-=dy; putpixel(xi,yi,4);xi=xe; yi=ye; xe=xc+r; ye=yc;while(abs(xi-xe)D&abs(yi-ye)D)ri=(xi-xc)*(xi-xc)+(yi-yc)*(yi-yc); fi=ri-r*r;if(fi=0) yi+=dy; e
19、lse xi+=dx;putpixel(xi,yi,5);getch; closegraph;实习感受:理论联系实际:首先是对 C 语言又有了重的生疏,可能是之前目光短浅,没想到 C- 9 -20232023 学年第一学期计算机图形学语言还能用来编制图形。通过这次实习对编程又有了进一步的了解。其次,对于计算机图形学有了更深的生疏,了解了它到底是用来做什么的。通过自己的亲身实践,真正地懂得了把握算法与将其实现是两码事。懂得算法只是说明 你知道了原理,而将其实现则是更为重要的。通过上机实习,熬炼了实际动手的力气,理论 联系实际,格外重要。另外,在编程过程中的反复调试、熬炼了我们的急躁与毅力,丰富了经受,由于任何一个程序都不是能够一边就写成功的。- 10 -