计算机图形学第3章

上传人:j****9 文档编号:54733586 上传时间:2018-09-18 格式:PPT 页数:50 大小:1.70MB
返回 下载 相关 举报
计算机图形学第3章_第1页
第1页 / 共50页
计算机图形学第3章_第2页
第2页 / 共50页
计算机图形学第3章_第3页
第3页 / 共50页
计算机图形学第3章_第4页
第4页 / 共50页
计算机图形学第3章_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《计算机图形学第3章》由会员分享,可在线阅读,更多相关《计算机图形学第3章(50页珍藏版)》请在金锄头文库上搜索。

1、第四章 图形程序设计,图形程序样例通用图形程序典型绘图方法动画程序设计,图案程序样例,金刚石图案肾形图案海绵图案,金刚石图案,图案生成思路:把半径为R的圆周n等分,然后用直线将各等分点两两连接,即形成金刚石图案。,肾形图案,将一个半径为R的圆周等分成2n份,然后以等分点为圆心,以等分点到对称分割该圆的直径的距离为半径画圆,即形成肾形图案。,海绵图案,主体是绘制三角形,还需要连接三角形三边的中点绘制另外的三角形。,2 通用图形程序的设计方法在设计和绘图工作中,各个专业领域都有自己常用的图形符号和图形。为了减少重复性工作及方便绘图,一般均把这些常用图形的绘制设计成独立的通用功能模块,也就是图形子程

2、序或图形函数,并组成图形库,供用户在绘图时选用。,构造功能模块的基本原则要做到通用和方便使用,这些程序就应模块化。模块是组建大规模结构化程序的基础和主要组成部分。因此,按照什么样的原则来构造模块是一个十分重要的问题。一般来说,这些基本原则有以下四条:,独立性原则 模块的独立性是指:每个模块都要具有其自身独立的含义,模块与模块之间的关系要明确简单,尽量避免隐含的关系,这不仅是为了保证模块的正确与安全,也是为了便于模块之间的组合。抽象性原则 最通常的抽象性是参数化。这种抽象性能扩大模块的适应能力,从而发挥模块自身更大的作用。,开放性原则 应能方便地对模块的部分属性和功能进行修改和扩充,从而使得模块

3、是可维护的,这种可维护性是延长模块生命周期的重要手段。继承性原则 即当模块在维护中部分属性发生了变化,但这种变化不会影响原模块在软件中的作用,以维护软件不同版本之间的兼容性。,正多边形程序下面我们以生成任意正多边形子程序的设计过程,来说明建立这种功能模块的一般方法。()建立模型明确目标画什么(功能)分析最起码的初始条件(定形:边数、边长;定位:定位点、方向。),( 2 ) 初始条件的给定方式及图形数据的确定(参数)直接以多边形顶点定位定位顶点 Ps始边倾角 边数 n边长 a,给定了定形和定位参数,就可以唯一地确定一个正多边形。但在图形程序中,必须给出具体的绘图数据(即各顶点坐标),才能绘图。这

4、些顶点坐标可通过初始条件计算求得:Ps:(xs , ys)P1: x1= xs+acosy1= ys+asinP2: x2= x1+acos(+)y2= y1+ asin (+),Pi: Xi=X(i-1) + acos(+(i-1)Yi=Y(i-1) + asin(+(i-1)其中:2/n (正多边形的外角),() 程序设计以顶点定位的多边形为例,来说明程序设计的过程:设计程序流程编写程序,n 3 ?(Y) 出错信息=2/n;=/180移当前点至(x0,y0);x=x0,y=y0I=1n-1循环 x=x+acos,y=y+asin画线至(x,y); =+ 画线至(x0,y0); 结束,if(

5、n3) return;theta=6.28318/n;(每次旋转角度)alpha=alpha*0.0174533;moveto(x0,y0);x=x0;y=y0;for(i=1;in;i+) x=x+a*cos(alpha);y=y+a*sin(alpha);lineto(x,y);alpha=alpha+theta;lineto(x0,y0);,以外接圆圆心定位的正多边形,定形参数:边数n和外接圆半径R; 定位参数:外接圆圆心坐标(x0,y0)和起始点半径的倾角;,P1: x1= x0+Rcosy1= y0+Rsin P2: x2= x0+Rcos(+)y2= y0+ Rsin (+)Pi:

6、 xi= x0+Rcos(+(i1))yi= y0+ Rsin (+ (i1) ),图案程序的设计方法 计算机善于做重复性的工作。所以利用它的这一特长,可以让它绘制一些我们难以作业的重复繁琐的图形。例如,一个正方形螺旋图案,看起来外貌很复杂,但是实际上,它只不过是由一个正方形通过不断旋转和缩小组成的。,图形分析由16个相似的方块拼接而成;每个方块是由正方形螺旋变化形成;每个相邻方块的螺旋方向相反。,每个正方形螺旋块,是由正方形的旋转和缩小组成,且经过变换后的正方形新顶点刚好在原正方形的边上。见图。,在三角形PQS中: QS=a2sin PS=a2cos QS+PS=a1 =a2(sin+ co

7、s),在图中,我们设两个正方形的外接圆半径分别为 R1和 R2,边长为a1和a2,旋转角为。则两个正方形间的缩小系数为:f=a2/a1,因此,根据图形关系可得到缩小系数f 的值为:f = a2 /a1=1 / (sin + cos)考虑到转角可以有取正值(逆时针旋转)或者负值(顺时针旋转)两种情况,但缩小系数 f 总是正值,所以在计算时用转角的绝对值。即:f = a2 /a1=1 / (sin | + cos |)并且,R2=R1f,程序设计通过对图案的分析,绘制它的程序应该有三部分:绘制任意位置及大小的正方形;由正方形通过旋转、缩小构成不同旋向的螺旋方块;将方块间隔拼成整个图案。,绘制任意正

8、方形根据图案中正方形的变换特点,程序应设计成以正方形的中心定位为好。主要程序段为:moveto(x1,y1) ;for ( i=1; i4 ; i+) alfa=alfa+1.57 ; /* 1.57=90 */x=x0+r*cos(alfa) ; y=y0+r*sin(alfa) ;lineto(x,y) ; lineto(x1,y1) ;,绘制螺旋方块(block)该程序完成的工作是要绘制正、反两个方向的螺旋块。所需的参数有:每次旋转的角度,旋转的次数n,正方形边长a;定位顶点。主要程序段为:,t=fabs(theta*0.0174533); f=1.0/(cos(t)+sin(t);r=

9、a/1.414;x0=x+0.5*a;y0=y+0.5*a;for(i=1;i=n;i+) polygon(x0,y0,r,4,alfa);/polygon画一个多边形r=r*f;alfa=alfa-theta; ,拼块程序拼块程序所作的工作是:计算每个方块的定位点,相间调用不同螺旋方向的方块。程序段为:for (i=1;i=4;i+) for (j=1;j=4;j+) block(x,y,a,n,theta);theta=-theta;x=x+a; x=100;y=y-a;theta=-theta; ,典型绘图方法,参数法绘图子图形拼接法绘图,参数绘图法,在生产活动中,存在大量相同类型的构件

10、,在设计绘图时,可以按照主要参数的比例关系来绘图。,1,图形分析,H=0.7d D=2d R1=1.5d b=2d(当l2d时取全长) d0=0.5d c=0.1d,2,绘图数据的确定,x1=-H=-0.7d; x2=-0.61d x3=-0.32d x4=0.8d x5=l-b; x6=l-c x7=l-0.5c x8=l y1=d y2=0.75d y3=0.5d y4=0.425d y5=0.4d,R2=0.38d Sina1=1/3 Sina2=25/38,子图形拼接绘图,动画模拟程序动画以其生动活泼和富有想象力的表现形式为人们所喜闻乐见。随着动画应用的广泛和深入,它已成为计算机图形学

11、的一个重要内容。动画的原理,是用一组相关的画片连续更替,当这种更替的速度达到一定快时,结果能产生使画面动起来的效果,即动画。,动画制作过程:把一个运动过程按时间先后分解成多步,每步画一张画。当把这些画片按顺序快速替换(25-30/sec)时,留给人们视觉上的感受是:整个运动过程仍是连续的。制作动画,要用到专门的动画软件。这里仅以语言编程实现的简单动画来说明动画的原理。用语言编程,可以有三种程序设计方法。,用重画技术设计动画程序依据动画生成的原理,在屏幕上不断清除原有的图形,又在新的位置上画出新的图形。这样快速重复,就可以使整个屏幕画面产生动起来的效果。清除屏幕上的图形,可用以下调用来实现:cl

12、eardevice ( ) ;,用多图形页设计动画程序有些图形卡,比如 EGA卡和 VGA卡,可支持多个图形页。所谓图形页是硬件的一个功能,即图形硬件能提供多个独立的图形存储区(页),这些页可分别用于存储不同的图形,并按需要输出。,因为存在有多个图形页,所以在使用中必须有所区分。我们可以用函数setactivepage 把指定的图形页设置成活动页,当前运行程序总是在活动页上绘图;而另一个函数 setvisualpage 用于设置显示页(即可见页)。当前活动页可以是显示页,也可以不是显示页,即活动页和显示页可以是不同的页。,程序设计思路因为可用多个图形页,所以在程序中,可把一个页设置成显示页,显

13、示这页上的图形;而把另一页设置成活动页,但是非显示的,程序在该活动页上绘图。当在活动页上绘完图后,再互换这两个页的设置。这就相当于在后台绘图,在前台显示。如此重复,实现动画效果。,程序实例在实现动画的 for 循环中,当循环变量 i 取值为偶数时,程序设置号页为显示页,设置号页为活动页,并在号页上绘图;当 i 取值为奇数时,程序设置号页为显示页,设置号页为活动页,并在号页上绘图。如此交替进行。,for(i=0;i108;i+) if( i,else /* 奇数页 */ setvisualpage(1);setactivepage(0);cleardevice( );setfillstyle(S

14、OLID_FILL,GREEN);fillpoly(5,road);moon(480-3*i,90,50);car(5,RED,9,pcar);,用图像函数设计动画程序在前面两个例子中,整个画面每次都是重新绘制的。如果画面比较复杂,那么每次重画就要化费较多的时间,过大的时间间隔会破坏过程的连续感。其实在整个过程中,运动的只是汽车和月亮,而背景是不动的。所以根据空间相关的原理,我们只需在新位置上重画汽车和月亮就可以了。,图像处理函数在 Turbo C 中,有几个图像函数,如getimage和putimage ,是用于存取屏幕位图像信息的。其中,getimage函数的功能是将指定区域内的位图像信息

15、存到内存中;putimage函数的功能是将内存中的位图像按指定的方式输出到屏幕指定的位置上。,程序设计思路在程序中,先画出汽车和月亮,并用getimage 函数把它们的位图像取存到内存中。然后调用 putimage 函数,把已存在内存中的汽车和月亮的图像,连续输出到屏幕上顺序变化着的位置上,结果产生动画的效果。,程序实例程序第一部分,先定义存储区地址指针:void *carsize , *moonsize ;然后在起始位置画出汽车和月亮。,程序第二部分,从屏幕上取下该两图的图像数据,并存入指定地址。moonsize = malloc(imagesize(455, 40, 540, 140);c

16、arsize = malloc(imagesize(0, 320, 90, 360);getimage(455, 40, 540, 140, moonsize);getimage(0, 320, 90, 360, carsize);,程序的第三部分,用直接拷贝的输出方式,把图像输出到顺序变化的位置上,以生成动画。for ( i =1 ; i =110 ; i+) putimage(455-3*i, 40, moonsize, COPY_PUT);putimage(5*i, 320, carsize, COPY_PUT);delay(TIME); ,作业,完成完整的左示图案程序设计。 完成一个子函数,可以实现在指定位置,以指定尺寸和角度画五角星。 使用课件上提供的三种方法,实现如例子“luna&car.exe”的动画。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号