裁剪计算机图形学.doc

裁剪计算机图形学.doc

ID:59132048

大小:231.50 KB

页数:13页

时间:2020-09-12

裁剪计算机图形学.doc_第1页
裁剪计算机图形学.doc_第2页
裁剪计算机图形学.doc_第3页
裁剪计算机图形学.doc_第4页
裁剪计算机图形学.doc_第5页
资源描述:

《裁剪计算机图形学.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验报告(2013—2014学年第二学期)课程名称:计算机图形学姓名:学院:专业:年级:实验报告2014年5月15日第3·4节综合楼426号室进入实验室时间进入时仪器设备状况离开实验室时间离开时仪器设备状况机器号9:50良好11:30良好32实验项目名称二维图形变换一、实验目的1.掌握cohen-sutherland直线段裁剪算法2.掌握sutherland-hodgman多边形裁剪算法二、实验内容1.利用cohen-sutherland算法实现直线段关于矩形窗口的裁减2.利用sutherland-hodgman算法实

2、现多边形关于矩形窗口的裁减实验过程:直线段的裁剪:1.编写相应程序(看教材代码),并调试。2.分完全可见、显然不可见、至少一个端点在窗口之外但非显然不可见三种情况,测试各种斜率的直线,查看程序运行结果。3.比较教材代码和下列代码,指出下列代码存在的问题。多边形的裁剪:1.写出intersect()函数的功能2.写出inside()函数的功能3.根据sutherland-hodgman算法,在sutherlandhodgmanpolygonclip()函数的/**/处写注释4.编写main函数,并调试三、实验过程(步骤)

3、及结果(源程序)(1)直线裁剪代码:typedefstruct{intxmax;intxmin;intymax;intymin;}rectang;structOutCode{intall;inttop;intbottom;intleft;intright;};voidCompOutCode(floatx,floaty,rectang*rect,OutCode*outcode){outcode->all=0;outcode->top=outcode->bottom=0;if(y>(float)rect->ymax){ou

4、tcode->bottom=1;outcode->all+=1;}elseif(y<(float)rect->ymin){outcode->top=1;outcode->all+=1;}outcode->right=outcode->left=0;if(x>(float)rect->xmax){outcode->right=1;outcode->all+=1;}elseif(x<(float)rect->xmin){outcode->left=1;outcode->all+=1;}}rectangCohenSuther

5、(float*xx0,float*yy0,float*xx1,float*yy1,rectang*rect){intaccept,done;OutCodeoutcode0,outcode1;OutCode*outcodeout;floatx0,y0,x1,y1;x0=*xx0;y0=*yy0;x1=*xx1;y1=*yy1;floatx,y;accept=FALSE;done=FALSE;CompOutCode(x0,y0,rect,&outcode0);CompOutCode(x1,y1,rect,&outcode1

6、);do{if(outcode0.all==0&&outcode1.all==0){//可见区域accept=TRUE;done=TRUE;}elseif((outcode0.all&outcode1.all)!=0)//显然不可见区域done=TRUE;else{//既非可见,又非显然可见区域if(outcode0.all!=0)//选窗口外的端点outcodeout=&outcode0;elseoutcodeout=&outcode1;if(outcodeout->left){//交点在左边y=y1+(y1-y0)

7、*(rect->xmin-x1)/(x1-x0);x=(float)rect->xmin;}elseif(outcodeout->top){//交点在上边x=x1+(x1-x0)*(rect->ymin-y1)/(y1-y0);y=(float)rect->ymin;}elseif(outcodeout->right){//交点在右边y=y1+(y1-y0)*(rect->xmax-x1)/(x1-x0);x=(float)rect->xmax;}elseif(outcodeout->bottom){//交点在下边x=

8、x1+(x1-x0)*(rect->ymax-y1)/(y1-y0);y=(float)rect->ymax;}if(outcodeout->all==outcode0.all){//丢弃显然不可见区域端点x0=x;y0=y;CompOutCode(x0,y0,rect,&outcode0);}else{x1=x;y1=y;Com

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。