图形学实验指导书.doc_第1页
图形学实验指导书.doc_第2页
图形学实验指导书.doc_第3页
图形学实验指导书.doc_第4页
图形学实验指导书.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

图形学实验指导书 实验一D DADA画线算法 一、实验学时2 二、实验类型验证性实验 三、实验要求和目的初步了解Tc下画图基本程序结构。 初步了解DDA画线算法的思想和基本方法。 四、实验内容DDA画线算法画一段直线1算法思路1算法描述设直线方程为b mx y?,1221121212,x xy x y xbx xy ym?对于直线,其数值微分是)()1()()1(i xi xiy iyxym?,由上式得,y(i+1)=y(i)+m(x(i+1)-x(i),于是知,使x(i)增1,即x(i+1)=x(i)+1时,y(i+1)=y(i)+m,为画线精确,应使相邻的画出点的坐标值相差最大值为1,这样可以得到画线段的数值微分分析器(Digital DifferentialAnalyzer,简称DDA),算法如下2C程序代码#include#include#includevoid DDALine(int x1,int y1,int x2,int y2,int color)double dx,dy,e,x,y,i;dx=x2-x1;dy=y2-y1;e=(fabs(dx)fabs(dy)?fabs(dx):fabs(dy);dx/=e;dy/=e;x=x1;y=y1;for(i=1;ix1,122)1 (2)1()1()1()1(2121?b y x md db x m y y y dyb xmy y di ii i ii i i?若差为正,即21d d?,下一个象素应取)1,1(i iy x?;若为负,即21d d?,下一个象素应取),1(i iy x?。 引入新的判别量pi cy x x yby xx xy yxd dx pi ii i i?22)122)1(2)(121221其中)12(2;1212?b x y cy y x x,又因为11?i ix x?,所以有)(211i i i iy x y p p?0?ip应取11i iy y?,此时)(21x y p pi i?pi0,应取i iy y?1,此时ypi i?21初始值的确定bx y y x xxyi i?111,?x yc bx x x ypxy?2)(221112.C程序代码#include#include#includevoid BresenhamLine(int x1,int y1,int x2,int y2,int color)int x,y,dx,dy,p;x=x1;y=y1;dx=x2-x1;dy=y2-y1;p=2*dy-dx;for(x=1;x=0)y+;p+=2*(dy-dx);elsep+=2*dy;void main()int driver=DETECT;int gmode;int x1,y1,x2,y2,color;printf(please inputx1,y1,x2,y2,color);scanf(%d,%d,%d,%d,%d,&x1,&y1,&x2,&y2,&color);initgraph(&driver,&gmode,);BresenhamLine(x1,y1,x2,y2,color);getch();closegraph();实验三中点画圆算法 一、实验学时2 二、实验类型验证性实验 三、实验要求和目的掌握中点画圆算法的基本思想编写中点画圆的基本函数并尽量完善 四、实验内容中点画圆算法画圆1算法描述构造函数222),(R y x yx F?对于圆上的点,有F(x,y)=0;对于圆外的点,有F(x,y)0;对于圆内的点,有F(x,y)0。 设M的坐标为M(xi+1,yi-0.5),构造判别式222)5.0()1()5.0,1()(R yx yx FM F di iii?,当d=0时,下一点取P2。 当d=0时,下一点取P2,再下一个点的判别式5) (2)5.1()2()5.1,2(222?i iiii iyx dRyxyx Fd判别式的初值R RFd?25.1)5.0 (1)5.0,1(202源程序#include#include#includevoid MidpointCircle(int x0,int y0,int R)int x,y;double d;x=0;y=R;d=1.25-R;while(x 一、实验学时2 二、实验类型验证性实验 三、实验要求和目的掌握Bresenham画圆算法的基本思想编写Bresenham算法画圆的基本函数并尽量完善 四、实验内容Bresenham画圆算法画圆,并改造函数,使之能画整圆。 1算法思路先求(0,R)到),2/(R之间的四分之一圆弧,然后由对称性求得整个圆。 取11?iix x,圆周上y的变化小于1,若第i步是),(i iyx,那么第i+1步只能是H(Xi+1,Yi)和D(Xi+1,Yi+1)点中的一个,H和D点离圆心距离的平方差222222)1()1()1(?iiDi iHy xR dRyxd令判别量D Hi dd p?当Pi=0时,下一点应选D点。 i iy y?1,641?iii xpp。 2.源程序:#include#include#includevoid BresenhamCirle(int R)int x,y,p;x=0;y=R;p=3-2*R;for(;x=0)p+=4*(x-y)+10;y-;elsep+=4*x+6;void main()int driver=DETECT,gmode;initgraph(&driver,&gmode,);BresenhamCirle (150);getch();closegraph();实验五正方形旋转 一、实验学时2 二、实验类型验证性实验 三、实验要求和目的掌握图形的旋转变换数学原理掌握一般图形旋转的基本算法 四、实验内容画一个正方形,并实现45度旋转,进一步可以使之动起来.1算法思路旋转变换)()1cos sinsin cos(1000cos sin0sin cos)1()1(?pR yxyxyxyxp?式中,?是图形以坐标原点为旋转中心的旋转角度。 本程序实现相对于任意一点(x0,y0)作变换,可以先平移到原点,相对于原点作变换后,再平移回去。 相对于任意一点(x0,y0)的旋转变换矩阵如下T(-x0,-y0)R(?).T(x0,y0)=100cos sin0100010sin cos0010001001001xyxy?1=cos sin0sin cos00(1cos)0sin0(1cos)0sin1xyyx?2C程序代码#include#includevoid main()int i,j,s,k;float cx;float a43=400,200,1,300,200,1,300,300,1,400,300,1;float pingyi33=1,0,0,0,1,0,-125,-125,1;float rpingyi33=1,0,0,0,1,0,125,125,1;float zhuan33=0,0,0,0,0,0,0,0,1;float axb43;float zaxb43;float rp43;int gdriver=DETECT,gmade;initgraph(&gdriver,&gmade,);line(a00,a01,a10,a11);line(a10,a11,a20,a21);line(a20,a21,a30,a31);line(a30,a31,a00,a01);for(i=0;i4;i+)for(j=0;j3;j+)s=0;for(k=0;k3;k+)s=s+aik*pingyikj;axbij=s;line(axb00,axb01,axb10,axb11);line(axb10,axb11,axb20,axb21);line(axb20,axb21,axb30,axb31);line(axb30,axb31,axb00,axb01);cx=(sqrt (2)/2.0;zhuan00=cx;zhuan01=cx;zhuan10=-cx;zhuan11=cx;for(i=0;i4;i+)for(j=0;j3;j+)s=0;for(k=0;k3;k+)s=s+axbik*zhuankj;zaxbij=s;line(zaxb00,zaxb01,zaxb10,zaxb11);line(zaxb10,zaxb11,zaxb20,zaxb21);line(zaxb20,zaxb21,zaxb30,zaxb31);line(zaxb30,zaxb31,zaxb00,zaxb01);for(i=0;i4;i+)for(j=0;j3;j+)s=0;for(k=0;kxr)c=2;if(yyt)c=c+8;return c;void main()int driver=DETCET;int mode;initgraph(&driver,&mode,);Cohen_Sutherland(75,75,200,200);getch();closegraph();实验七两条线段求交算法 一、实验学时2 二、实验类型验证性实验 三、实验要求和目的掌握线段求交的一般思想方法.实现线段求交算法 四、实验内容求两条线段的交点,并是函数适应性更广1算法思路1)计算行列式)()(a bd cd ca byyx xyyxx?若行列式0,则两线段重合或平行,无交点,算法结束;2)计算交点参数?/)()(a cd cd ca cyxyx?若10?或,则无交点,算法结束3)计算交点)(),(a b a abayyyyxxxx?2.C程序代码2.源程序:#include#includevoid main()int xa,ya,xb,yb,xc,yc,xd,yd,x,y,color;double t1,t2,deater;int driver=DETECT;int gmode;initgraph(&driver,&gmode,);scanf(%d,&xa);scanf(%d,&ya);scanf(%d,&xb);scanf(%d,&yb);scanf(%d,&xc);scanf(%d,&yc);scanf(%d,&xd);scanf(%d,&yd);line(xa,ya,xb,yb);line(xc,yc,xd,yd);deater=-(xb-xa)*(yd-yc)+(xd-xc)*(yb-ya);if(deater=0)printf(zhi xianping xing);elset1=(xc-xa)*(yc-yd)-(xc-xd)*(yc-ya)/deater;t2=(xb-xa)*(yc-ya)-(xc-xa)*(yb-ya)/deater;if(0 一、实验学时2 二、实验类型验证性实验 三、实验要求和目的掌握包含判断一般思想方法.实现点对简单多边形(五边形,自己定义顶点坐标) 四、实验内容编程实现点对五边形的包含检查算法。 1.算法思路首先通过给出点的坐标画出五边形,然后1)准备nx=0x,ny=0y,m=-1;i=0;2)排除必不相交的情形若下列条件有一个成立,则到4。 p ixx?并且1p ixx?;2p ixx?并且;1p ixx?3p iyy?并且1p iyy?;3)计算交点11()()/()i piiiiiyyxxyyxx?,分两种情况1若y=py,则点P在多边形的边界上,算法结束;2若y 最后,从要判断的点,向下画直线,便于观察点在多边形内部,外部还是在边界上,并且同时输出英文句子,若再边界上则输出point p is onthe edgeof graph若再内部则输出point p is onthe edgeof graph,否则输出Point pis in the graph。 1C程序代码main()int xx10,yy10,m,i,x0,y0,n,y;n=4;x0=600;y0=400;printf(please putthe pointsn);for(i=0;ixxi&x0=xxi+1|x0=yyi&y0=yyi+1)y=yyi+(x0-xxi)*(yyi+1-yyi)/(xxi+1-xxi);if(y=y0)printf(it isin theboundn);elseif(y 一、实验学时4 二、实验类型验证性实验 三、实验要求和目的掌握Bezier曲线的一般性质实现Bezier曲线的描绘 四、实验内容现实现Bezier曲线的画线算法1算法描述首先给定四个初始点,由公式可以得到计算n次Bezier曲线上控制点在t时的值P(t),可以归结为两个n-1次Bezier曲线在t时的线性组合。 t每增加一个步长,由递推计算关系可以得到一个对应的P(t)值,依次画出点(t,P(t)),则可以得到曲线2源程序#include#includevoid bezier(int degree,int npoints,double coeff1,double coeff2)double t,delt;int i;delt=1.0/(double)npoints;t=0.0;for(i=0;i=npoints;i+)decas(degree,coeff1,coeff2,t);t+=delt;decas(int degree,double coeff1,double coeff2,double t)int r,i;double*coeffa,coeffa10,coeffa20;double coeffa15,coe

温馨提示

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

评论

0/150

提交评论