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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(实验一DDA画线算法Word文件下载.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

实验一DDA画线算法Word文件下载.docx

1、 int driver=DETECT; int gmode; int x1,y1,x2,y2,color; printf(please input x1,y1,y1,y2,colorn); scanf(%d,%d,%d,%d,%d,&x1,&y1,&x2,&y2,&color); initgraph(&driver,&gmode, DDALine(x1,y1,x2,y2,color); getch(); closegraph();实验二 Bresenham画线算法掌握中点画线算法的思想和基本方法用Bresenham画线算法画直线,并完善算法功能,使之适应更广1算法思路 假定直线段的斜率0m 1

2、,且x2x1,若差为正,即,下一个象素应取;若为负,即。引入新的判别量pi其中,又因为,所以有应取,此时 pi0,应取,此时初始值的确定: 2.C程序代码void BresenhamLine(int x1,int y1,int x2,int y2,int color) int x,y,dx,dy,p; p=2*dy-dx; for(x=1;x=0) y+; p+=2*(dy-dx); else p+=2*dy;int driver=DETECT;int gmode;int x1,y1,x2,y2,color;printf(please input x1,y1,x2,y2,colorscanf(

3、initgraph(&BresenhamLine(x1,y1,x2,y2,color);getch();closegraph();实验三 中点画圆算法掌握中点画圆算法的基本思想编写中点画圆的基本函数并尽量完善中点画圆算法画圆构造函数对于圆上的点,有F(x,y)=0;对于圆外的点,有F(x,y)0;对于圆内的点,有F(x,y)0。设M的坐标为:M(xi +1,yi-0.5),构造判别式:,当d=0时,下一点取P2。0时,下一点取P1,再下一个点的判别式:=0时,下一点取P2,再下一个点的判别式:判别式的初值:2 源程序:void MidpointCircle(int x0,int y0,int

4、R) int x,y; double d; x=0; y=R; d=1.25-R; while(xy) if(d0) d+=x+x+3; x+; d+=(x-y)+(x-y)+5; y-; putpixel(x0+x,y0+y,RED); putpixel(x0+y,y0+x,RED); putpixel(x0+y,y0-x,RED); putpixel(x0+x,y0-y,RED); putpixel(x0-x,y0-y,RED); putpixel(x0-y,y0-x,RED); putpixel(x0-y,y0+x,RED); putpixel(x0-x,y0+y,RED); main(

5、) int driver=DETECT,mode;mode, MidpointCircle(200,200,100);1 实验四 Bresenham画圆算法掌握Bresenham画圆算法的基本思想编写Bresenham算法画圆的基本函数并尽量完善Bresenham画圆算法画圆,并改造函数,使之能画整圆。先求(0,R)到之间的四分之一圆弧,然后由对称性求得整个圆。取,圆周上y的变化小于1,若第i步是,那么第i+1步只能是H(Xi+1,Yi)和D(Xi+1,Yi+1)点中的一个, H和D点离圆心距离的平方差令判别量当Pi=0时,下一点应选D点。2.源程序:void BresenhamCirle(i

6、nt R) int x,y,p; p=3-2*R; for(;=y; putpixel(x+200,y+100,3); putpixel(x+200,-y+100,3); putpixel(y+200,x+100,3); putpixel(-y+200,x+100,3); putpixel(-x+200,y+100,3); putpixel(-x+200,-y+100,3); putpixel(-y+200,-x+100,3); p+=4*(x-y)+10; p+=4*x+6;int driver=DETECT,gmode;BresenhamCirle(150);实验五 正方形旋转掌握图形的旋

7、转变换数学原理掌握一般图形旋转的基本算法画一个正方形,并实现45度旋转,进一步可以使之动起来.1算法思路旋转变换:式中,是图形以坐标原点为旋转中心的旋转角度。本程序实现相对于任意一点(x0,y0)作变换,可以先平移到原点,相对于原点作变换后,再平移回去。相对于任意一点(x0,y0)的旋转变换矩阵如下:T(-x0,-y0)R().T(x0,y0)=1 = 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 rp

8、ingyi33=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;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;4; for(j=0;j3;j+) s=0; for(k=0;kk+) s=s+aik*pingyikj; ax

9、bij=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; s=s+axbik*zhuankj; zaxbij=s; line(zaxb00,zaxb01,zaxb10,zaxb11); line(zaxb10,zaxb11,zaxb20,zaxb21); line

10、(zaxb20,zaxb21,zaxb30,zaxb31); line(zaxb30,zaxb31,zaxb00,zaxb01); s=s+zaxbij*rpingyikj; rpij=s; line(rp00,rp01,rp10,rp11); line(rp10,rp11,rp20,rp21); line(rp20,rp21,rp30,rp31); line(rp30,rp31,rp00,rp01);实验六 直线段裁剪算法4 掌握直线段裁剪算法的一般思想方法.画几条线段,利用裁剪算法实现特定的裁剪,并验证算法的正确性P52 第一步: 编码。设直线段的两个端点为P1(x1,y1)和P2(x2,

11、y2),根据编码规则,可以求出P1和P2所在的代码c1和c2; 第二步: 判别。根据c1和c2的具体值,可以有三种情况:1) c1=c2=0,这表明两端点全在窗口内,则整个直线也在窗口内,应该保留;2) c1&c2!=0,表明两端点必定同处于某一边界的同一外侧,则整个直线全在窗口外,应该舍弃;如不属于上面两种请况,表明直线有一部分在窗口内,又可以分为以下三种情况: (1) 一个端点在内,一个端点在外;(2) 两个端点均在外,但直线段中部跨越窗口;(3) 两端点都在外,且直线段也在外。第三步: 求交。对不能确定取舍的直线段,求其与窗口边界及其延长线的交点,从而将直线段分割。求交点时,可以有针对性

12、地与某一确定边界求交。在交点处把线段分为两段。把其中一段完全在窗口外,舍弃之。 第四步: 对剩下的线段重复以上各步,可以验证,至多重复到第三遍的判断为止,这时剩下的直线段或者全在窗口内,或者全在窗口外,从而完成了对直线段的裁剪。#define x1 150#define xr 180#define yt 180#define yb 150void Cohen_Sutherland(double x0,double y0,double x2,double y2) int c,c1,c2; double x,y; c1=makecode(x0,y0); c2=makecode(x2,y2); wh

13、ile(c1!=1) if(c1&c2=1) return; c=c1; if(c=0) c=c2; if(c&1=1) y=y0+(y2-y0)*(x1-x0)/(x2-x0);2) x=xr;4) y=yb;8) y=yt; if(c=c1) x0=x; y0=y; c1=makecode(x,y); x2=x; y2=y; c2=makecode(x,y); line(x0,y0,x2,y2); int makecode(double x,double y) int c=0; if(xxr) c=2; if(yyt) c=c+8; return c; int driver=DETCET;

14、 int mode; Cohen_Sutherland(75,75,200,200);实验七 两条线段求交算法掌握线段求交的一般思想方法.实现线段求交算法求两条线段的交点,并是函数适应性更广1)计算行列式:若行列式0,则两线段重合或平行,无交点,算法结束;2)计算交点参数:若,则无交点,算法结束3)计算交点int xa,ya,xb,yb,xc,yc,xd,yd,x,y,color;double t1,t2,deater;int driver=DETECT;%dxa);ya);xb);yb);xc);yc);xd);yd);line(xa,ya,xb,yb);line(xc,yc,xd,yd);

15、deater=-(xb-xa)*(yd-yc)+(xd-xc)*(yb-ya);if(deater=0)zhi xian ping xing else t1=(xc-xa)*(yc-yd)-(xc-xd)*(yc-ya)/deater; t2=(xb-xa)*(yc-ya)-(xc-xa)*(yb-ya)/deater; if(0t1&t11&0t2&t21) x=xa+t1*(xb-xa); y=ya+t1*(yb-ya); putpixel(x,y,4);%d,%d,x,y);liang xian bu hui xiang jiao实验八 点对简单多边形的包含掌握包含判断一般思想方法.实现

16、点对简单多边形(五边形,自己定义顶点坐标)编程实现点对五边形的包含检查算法。1.算法思路首先通过给出点的坐标画出五边形,然后:1)准备 ,m=-1;i=0;2)排除必不相交的情形若下列条件有一个成立,则到4。并且;并且;3)计算交点,分两种情况:若y=,则点P在多边形的边界上,算法结束;若y,则m=(-1).m;4)结束判断 i=i+1,若ixxi&x0=xxi+1|x0=yyi&y0=yyi+1) y=yyi+(x0-xxi)*(yyi+1-yyi)/(xxi+1-xxi); if(y=y0)it is in the boundny0) m=-1*m; if(m=-1)p is out of

17、 the duo bian xing n if(m=1)p is in the duo bian xing n实验九 Bezier曲线掌握Bezier曲线的一般性质实现Bezier曲线的描绘实现Bezier曲线的画线算法首先给定四个初始点,由公式可以得到计算n次Bezier曲线上控制点在t时的值P(t),可以归结为两个n-1次Bezier曲线在t时的线性组合。t每增加一个步长,由递推计算关系可以得到一个对应的P(t)值,依次画出点(t,P(t),则可以得到曲线2源程序:void bezier(int degree, int npoints,double coeff1,double coeff2) double t,delt; int i; delt=1.0/(double)npoints; t=0.0;=npoints; 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,coeffa25;=degree; coeffa1i=coeff1i; coeffa2i

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2