二维裁剪算法Cohen_Sutherland的实现

二维裁剪算法Cohen_Sutherland的实现

ID:46581162

大小:1.30 MB

页数:13页

时间:2019-11-25

二维裁剪算法Cohen_Sutherland的实现_第1页
二维裁剪算法Cohen_Sutherland的实现_第2页
二维裁剪算法Cohen_Sutherland的实现_第3页
二维裁剪算法Cohen_Sutherland的实现_第4页
二维裁剪算法Cohen_Sutherland的实现_第5页
资源描述:

《二维裁剪算法Cohen_Sutherland的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验六二维裁剪算法Cohen_Sutherland的实现一、实验目的:理解并掌握直线裁剪算法。使用VisualC++实现二维直线的裁剪的Cohen_Sutherland算法。对窗口进行编码,并实现相应的裁剪函数。二、实验内容及要求:1、要求用消息映射的方式,绘制出一个裁剪窗口,大小为200×150象素;2、按照例程的步骤画出3条典型线段,分别对应于完全在裁剪窗口内、完全在裁剪窗口外、穿过裁剪窗口三种情况,并按照本实验例程的方法用颜色分别表示出裁剪后的情况;3、按要求撰写实验报告,写出实验心得,并在实验报告中附上程序的核心算法代码。三、实验设备:微机,Visua

2、lC++6.0四、实验内容及步骤:1、打开VC,新建一个MFCAppwizard项目,选择创建单文档工程(SDI工程)。假设工程名为Clip。如图1和图2所示。图1图22、在图2的界面上点击Finish,完成工程的创建。3、在视图类ClipView中定义变量CRectrect;用于记录裁剪窗口的位置;4、在ClipView.cpp文件中定义四个宏,记录裁剪窗口的上下左右四个位置:#defineLEFT100#defineRIGHT300#defineTOP150#defineBOTTOM3105、在视图类的构造函数中为rect赋值;CClipView::CCl

3、ipView(){//TODO:addconstructioncodehererect=CRect(LEFT,TOP,RIGHT,BOTTOM);}6、在视图类(类CFillView中)的OnDraw()函数中绘制裁剪矩形,OnDraw函数的代码如下:voidCClipView::OnDraw(CDC*pDC){CClipDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedataherepDC->Rectangle(&rect);}7、在视图类(类CFillView中)添加

4、成员函数intEncode(intx,inty),该函数用于对线段的两个顶点进行Cohen_Sutherland编码。函数体如下:intCClipView::Encode(intx,inty){intnCode=0;if(x

5、0x01;if(x>RIGHT)nCode=nCode

6、0x02;if(y>BOTTOM)nCode=nCode

7、0x04;if(y

8、0x08;returnnCode;}8、在视图类中添加Cohen_Sutherland裁剪算法的实现函数,函数体如下:voidCClipVi

9、ew::CLIP_Line_Cohen_Sutherland(CPoint&P1,CPoint&P2){intnCode1=0;intnCode2=0;nCode1=Encode(P1.x,P1.y);nCode2=Encode(P2.x,P2.y);if(nCode1==0&&nCode2==0)return;//直线在裁剪窗口内,直接返回elseif((nCode1&nCode2)!=0){P1=CPoint(0,0);P2=CPoint(0,0);return;//直线在裁剪窗口外,将直线的两个端点赋为0,返回}doublewx=P2.x-P1.x;do

10、ublewy=P2.y-P1.y;doubledX=0;doubledY=0;while(nCode1!=0

11、

12、nCode2!=0){intnCode=nCode1;if(nCode1==0)nCode=nCode2;if((nCode&0x01)==0x01)//说明左边与边界有交点{dX=LEFT;dY=P1.y+wy*(LEFT-P1.x)/wx;}elseif((nCode&0x02)==0x02)//说明右边与边界有交点{dX=RIGHT;dY=P1.y+wy*(RIGHT-P1.x)/wx;}elseif((nCode&0x04)==0x04)//

13、说明下边与边界有交点{dX=(BOTTOM-P1.y)*wx/wy+P1.x;dY=BOTTOM;}elseif((nCode&0x08)==0x08)//说明上边与边界有交点{dX=(TOP-P1.y)*wx/wy+P1.x;dY=TOP;}if(nCode==nCode1){P1=CPoint((int)(dX+0.4),(int)(dY+0.4));nCode1=Encode(P1.x,P1.y);}else{P2=CPoint((int)(dX+0.4),(int)(dY+0.4));nCode2=Encode(P2.x,P2.y);}}}9、映射菜单

14、消息,方法是打开ResourceVie

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

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

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