计算机图形学实验报告-Cohen-Sutherland线裁剪算法_第1页
计算机图形学实验报告-Cohen-Sutherland线裁剪算法_第2页
计算机图形学实验报告-Cohen-Sutherland线裁剪算法_第3页
计算机图形学实验报告-Cohen-Sutherland线裁剪算法_第4页
计算机图形学实验报告-Cohen-Sutherland线裁剪算法_第5页
全文预览已结束

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业 班 级 R数学111 大连交通大学 姓 名 实 验 报 告 同 组 人 课程名称: 计算机图形学 成 绩 实验名称: Cohen-Sutherland线裁剪算法 指导老师 实验目的、要求:通过上机实践,更好地掌握Cohen-Sutherland线裁剪算法实验仪器:PC机、VC6.0实验步骤、内容:菜单消息响应函数(注意:绿色背景色字体的代码在实验报告中不用写)辅助函数代码:#include inline int round (const float a)return

2、int(a+0.5);/取整void DDAline(int x0,int y0,int xEnd,int yEnd,CDC* pDC)/DDA画线,用于裁剪算法中线输出int dx=xEnd-x0, dy=yEnd-y0,steps,k;float xIncrement, yIncrement, x=x0, y=y0;if(fabs(dx)fabs(dy)steps=fabs(dx);elsesteps=fabs(dy);xIncrement=float(dx)/float(steps);yIncrement=float(dy)/float(steps);pDC-SetPixel(round

3、(x),round(y),RGB(255,0,0);for(k=0;kSetPixel(round(x),round(y),RGB(255,0,0);/*/裁减函数 以下是线裁剪算法class wcPt2Dpublic:int x,y;/定义两全局变量const int winLeftBitCode=1;/(1相当二进制001) 常量定义const int winRightBitCode=2;/(2相当二进制0010)const int winBottomBitCode=4;/(4相当二进制0100)const int winTopBitCode=8;/(8相当二进制1000)/inline

4、int round (const float a)return int(a+0.5);inline int inside(int code)return int(!code);/两区域码为假,在裁剪窗内部inline int reject(int code1,int code2)/与运算为真,线在裁剪窗外部return int (code1 & code2);/与运算inline int accept(int code1,int code2)/或运算为假,在裁剪窗内部return int (!(code1| code2);/或运算int encode (wcPt2D pt,wcPt2D win

5、Min, wcPt2D winMax)/确定端点区域码int code=0;if(pt.xwinMax.x)code=code|winRightBitCode;/或运算,能使某位有一,就使四位相应位变一。if(pt.ywinMax.y)code=code|winTopBitCode;return(code);void swapPts(wcPt2D *p1,wcPt2D *p2)wcPt2D tmp;tmp=*p1;*p1=*p2;*p2=tmp;void swapCodes(int *c1,int *c2)int tmp;tmp=*c1;*c1=*c2;*c2=tmp;消息响应函数代码:voi

6、d CClipView:OnCohen() CDC* pDC=GetDC();int code1,code2;int done=false,plotLine=false;float m;wcPt2D p1,p2,winMin,winMax;p1.x=80,p1.y=100;p2.x=300,p2.y=450;/用于裁剪的线段端点坐标winMin.x=80,winMin.y=100;/裁剪窗口坐标winMax.x=280,winMax.y=320;DDAline(winMin.x,winMin.y,winMax.x,winMin.y,pDC);/画裁剪窗口DDAline(winMax.x,win

7、Min.y,winMax.x,winMax.y,pDC);DDAline(winMax.x,winMax.y,winMin.x,winMax.y,pDC);DDAline(winMin.x,winMax.y,winMin.x,winMin.y,pDC);/DDAline(round(p1.x),round(p1.y),round(p2.x),round(p2.y),pDC);while(!done)code1=encode(p1,winMin,winMax); /确定p1区域码code2=encode(p2,winMin,winMax); /确定p2区域码if(accept(code1,cod

8、e2) /判断是否完全在窗口内,是返回两参量done=true;plotLine=true;else if(reject(code1,code2)/判断是否完全在窗口外done=true;else /不能判断完全在内或外的情况if(inside(code1)/如果p1在裁剪窗口内,交换swapPts(&p1,&p2);swapCodes(&code1,&code2);if(p2.x!=p1.x)m=(p2.y-p1.y)/(p2.x-p1.x);/算出线的斜率if(code1&winLeftBitCode) /如果与左边界与运算为真,求交点p1.y+=(winMin.x-p1.x)*m;p1.x=winMax.x;else if(code1&winRightBitCode)/与右边界与运算为真,求交点p1.y+=(winMax.x-p1.x)*m;p1.x=winMax.x;else if(code1&winBottomBitCode) /与下边界与运算为真,求交点if(p2.x!=p1.x)p1.x+=(winMin.y-p1.y)/m;p1.y=winMin.y;else if(code1&winTopBitCode) /与上边界与运算为真,求交点if(p2.

温馨提示

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

评论

0/150

提交评论