计算机图形学实验报告_12.docx

上传人:lao****ou 文档编号:900084 上传时间:2024-07-17 格式:DOCX 页数:29 大小:80.17KB
下载 相关 举报
计算机图形学实验报告_12.docx_第1页
第1页 / 共29页
计算机图形学实验报告_12.docx_第2页
第2页 / 共29页
计算机图形学实验报告_12.docx_第3页
第3页 / 共29页
计算机图形学实验报告_12.docx_第4页
第4页 / 共29页
计算机图形学实验报告_12.docx_第5页
第5页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《计算机图形学实验报告_12.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告_12.docx(29页珍藏版)》请在第一文库网上搜索。

1、计算机图形学实验报告-k实验题目:利用计算机编程语言绘制图形,主要实现以下内容:(1)、中点算法生成任意斜率直线,并设置线型线宽。(2)、中点算法生成圆(3)、中点算法生成椭圆(4)、扫描算法实现任意多边形填充(5)COhen_Suther1and裁剪(6)、自由曲线与曲面的绘制(7)、二维图形变换(8)、三视图变换二、系统分析与设计本实验采用C语言编程,运行环境为TurboC;三、算法思想及程序实现1、中点算法生成任意斜率直线,并设置线型线宽。(1).算法思想假定直线斜率k在01之间(k的其它取值可以类似处理),当前象素点为QXmy),则下一个象素点有两种可选择点A(耳+1,%)或R(4+1

2、,%+1)。若片与己的中点(4+1,%+0.5)称为M。为理想直线与方4+1垂线的交点。当M在。的下方时,则取己应为下一个象素点;当在O的上方时,则取A为下一个象素点。这就是中点画线法的基本原理。下面讨论中点画线法的实现。过点(%,%)、(小,必)的直线段的方程式为F(x,y)=a-f-by-f-c=O,其中,a=yfyx,b=xx0tc=xQy-XiyQf欲判断中点在0点的上方还是下方,只要把V代入/(x,y),并判断它的符号即可。为此,我们构造判别式:d=FUf)=F(x计1+0.5)=a(4+1)+6(%+0.5)+c当水O时,材在(。点)下方,取鸟为下一个象素;当力O时,材在(。点)上

3、方,取R为下一个象素;当少0时,选片或K均可,约定取A为下一个象素;注意到d是心力的线性函数,可采用增量计算,提高运算效率。若当前象素处于0情况,则取正右方象素A(%,+1,%),要判下一个象素位置,应计算d=尸(4+2,%+0.5)=a(%+2)+6(%+0.5)=*3,增量为外若水0时,则取右上方象素冏(3+1,Do要判断再下一象素,则要计算F(X注2,+1.5)=a(3+2)+b(%+15)+GAa+b,增量为a+瓦画线从(岗,外)开始,d的初值=7(+1,%+0.5)=尸(加,%)+a+0.56,因F5%)=0,所以d=a+0.5瓦由于我们使用的只是d的符号,而且d的增量都是整数,只是

4、初始值包含小数。因此,我们可以用2d代替d来摆脱小数。(2)程序实现voidputpixe1s(intx,inty,intco1or,intn)inti,j;for(i=-n2;i=n2;i+)for(j=-n/2;j=n/2;j+)putpixe1(x+j,y+i,co1or);voidMidpoint1ine(intx,inty,intx1,inty1,intco1or,intn)(inta,b,dx,dy,d,x,y,incrP1,incrP2;if(x=x1)(if(yy1)for(y=y;y=y1;y一)putpixe1(x,y,co1or);)e1seif(xx1)(if(yy1)

5、(dy-y1-y;dx-x1-;d=d-2*dy;incrP1=-2*dy;incrP2=2*(d-dy);x=x;y=y;putpixe1s(x,y,co1or,n);whi1e(xx1)(if(d0)y+;d+=incrP2je1sed+=incrP1;x+;putpixe1s(x,y,co1or,n);)e1se(dy-y1-y;dx=x1-;d=-2*dy-dx;incrP1=-2*(dx+dy);incrP2=-2*dy;x-x;y-y;putpixe1s(x,y,co1or,n);whi1e(x0)y;d+=incrP1;e1sed+=incrP2;x+;putpixe1s(x,y

6、,co1or,n);)e1seif(xx1)if(yy1)dy=yy1;dx=xx1;d=-2*dy-dx;incrP1=-2*(dx+dy);incrP2=-2*dy;=1;y-y1;putpixe1s(x,y,co1or,n);whi1e(xO)y一;d=incrP1;e1sed+=incrP2;x+;putpixe1s(x,y,co1or,n);)e1se(dy-y-y1;dx-x-x1;d-dx-2*dy;incrP1=-2*dy;incrP2=2*(d-dy);x=x1;y=y1;putpixe1s(x,y,co1or,n);whi1e(xx)if(d0,对于圆内的点尸(x,y)0O

7、与中点画线法一样,构造判别式:d=FUf)=F(x计1-0.5)=U+1)2+(-0.5)2-4若水0,则应取A为下一象素,而且再下一象素的判别式为:d=F(x42,-0.5)=(+2)2+(-05尸一二在2%,+3若心0,则应取R为下一象素,而且下一象素的判别式为dF(x2,yp-1.5)=+2)2+(%T.5)之=d+2(&-%)+5我们这里讨论的第一个象素是(0,冷,判别式d的初始值为:即F(1R0.5)=1.25-7?为了进一步提高算法的效率,将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。(2)程序实现:voidmidpointcirc1e(int

8、R)intx,y,de1tax,de1tay,d;x=O;y=R;d=1-R;de1tax=3;de1tay=5-R-R;putpixe1(x+300,y+300,GREEN);whi1e(xy)(if(d1时相同,要以y为自变量,在此不再详细叙述。对于椭圆:考虑分界点的上部的弧段,此段的斜率m-1,0,由像素(七,M)递推出后继的像素U-+1,r)o根据条件得到r11y先,/,)V+5)r31n+=W当4o当4o4+4从(2为+3)当404+4/(2玉+3)8/(Kr-1)当40(,%)=(力)初始条件为d0=4/(1力-;)=4b2_4a2b+2,对于分界点下方的弧段,可类似求得。(2)程

9、序实现voidputpixe1s(intx,inty,intco1or,intn)iti,j;for(i=-n/2;i=n/2;i+)for(j=-n2;j=n2;j+)putpixe1(x+j,y+i,co1or);voide11ipsepoint(1ongx,1ongy,1ongx,1ongy,1ongco1or,intn)putpixe1s(int)(x+x),(int)(y+y),(int)co1or,n);putpixe1s(int)(xx),(int)(y+y),(int)co1or,n);putpixe1s(int)(x+x),(int)(y-y),(int)co1or,n);p

10、utpixe1s(int)(xx),(int)(y-y),(int)co1or,n);voidIiiidpointe1Iipse(1ongx,1ongy,1onga,1ongb,1ongco1or,intn)1ongx,y,d,sa,sb,xp,yp;sa=a*a,sb=b*b;xp-(1ong)(f1oat)sa(f1oat)sqrt(f1oat)(sa+sb);yp=(1ong)(f1oat)sb(f1oat)sqrt(f1oat)(sa+sb);x=0,y=b,d=sa+4*sb-4*sa*b;whi1e(xxp)(if(dO)d=d+4*sb*(2*x+3);x+;e1sed=d+4*

11、sb*(2*x+3)+4*sa*(2-2*y);x+;y;)e11ipsepoint(x,y,x,y,co1or,n);)x=a,y=0,d=4*sa+sb-4*a*sb;whi1e(yyp)if(dO)(d-d+4*sa*(2*y+3);y+;e1se(d=d+4*sa*(2*y+3)+4*sb*(2-2*x);y+;X;e11ipsepoint(x,y,x,y,co1or,n);4、用扫描线算法实现多边形填充:(1)算法思想:用水平扫描线从上到下扫描由点线段构成的多段定义的多边形。每根扫描线与多边形各边产生一系列交点,将这些交点按照X坐标进行排序,将排序后的交点成对取出,作为两个端点,用所

12、需填充的色彩画水平直线。多边形被扫描完毕,则填充结束。实现步骤:(1)建立边的分类表ET;(2)将扫描线纵坐标y的初值为ET中非空元素的最小序号;(3)置活化边表AE1为空;(4)执行下列步骤直至ET和AE1都为空;A、如果ET中的第y类非空,则将其中的所有边取出并插入AE1中,在插入过程忠进行排序;B、 对AE1中的边两两配对,将每对边中X坐标按规则取整,获得有效的填充区段,再填充;C、 将当前扫描线纵坐标y值递增1,即尸1;D、将AE1中满足y=ymax边删去;E、对AE1中剩下的每一条边的X递增de1tax,即x=x+de1tax;(2)程序实现tedefstruct(inty_top;f1oatx_int;intde1ta_y;f1oatx_change_per_scan;EACH_ENTRY;EACH_ENTRYsidesMAX_P0INT;intxMAX_POINT,yMAX_POINT;intside_count,first_s,1ast_s,scan,bottomscan,x_int_count;vo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服