逐边法裁剪多边形实验报告

逐边法裁剪多边形实验报告

ID:38425936

大小:100.50 KB

页数:6页

时间:2019-06-12

逐边法裁剪多边形实验报告_第1页
逐边法裁剪多边形实验报告_第2页
逐边法裁剪多边形实验报告_第3页
逐边法裁剪多边形实验报告_第4页
逐边法裁剪多边形实验报告_第5页
资源描述:

《逐边法裁剪多边形实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、题目:逐边法裁剪多边形姓名:董志刚学号:200911629班级:116专业:计算机日期:2011,10,20实验三:多边形裁剪之逐边裁剪法1)原理:窗口的一条边以及延长线构成的裁剪线该线把平面分成两个部分:可见一侧;不可见一侧。多边形的各条边的两端点S、P。它们与裁剪线的位置关系只有四种:1)都在可见一侧,则输出P。2)都在不可见一侧,输出0个点。3)S在可见一侧,P在不可见一侧,输出交点I。4)S在不可见一侧,P在可见一侧,则输出交点I和端点P。2)实现方法:先画出裁剪窗口(矩形)鼠标左键按下的点确定矩形的左上端点(po

2、int1),弹起的点确定矩形右下端点(point2)。再画待裁剪的多边形,第一次鼠标按下和弹起画多边形的第一条边,以后每次按下就画一条从上一个点到这个点的直线。用裁剪窗口的每一边去裁剪多边形,得到一个新的的多边形,将多边形的各个端点存放于数组m_strpo[]中,再用其他边裁剪刚得到的多边形,依次类推。在CVIEW类中添加几个变量如下:Intcnt;构造函数中赋值0,用于存储数组元素个数Boolm_pDraw;构造函数中赋值FALSE,用以判断是否鼠标是否已被按下Boolm_pDrawRet;用以判断是否已经画出了多边形C

3、Pointpoint1,point2;用以存放裁剪矩形窗口的两个顶点CPointm_strpo[10];存放待裁剪的多变形的有序端点CPointm_strcut[20];存放裁剪后的多边形的有序端点CPointm_pOrigin;画多边形的起始点,捕捉第一次鼠标按下和以后每次鼠标谈起的坐标,以实现第一次鼠标按下和弹起画第一条线,以后每次按下就画一条从上次弹起至此点的线。在CVIEW类中添加两个消息处理LButtonDown和LButtonUp,具体代码如下:voidCPolyAlignView::OnLButtonDown

4、(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(m_pDrawRet==TRUE)//矩形已画后出执行以下代码,画多边形{CClientDCdc(this);dc.MoveTo(point);if(m_pDraw==FALSE)//鼠标未按下执行{m_pOrigin=point;m_strpo[cnt++]=point;//最后一个点和起点重合(相近)}else{dc.MoveTo(m_pOrigin);//以

5、后每次按下则画一条从上一点到此点的线dc.LineTo(point);m_strpo[cnt++]=point;}}else//未画矩形则将鼠标按下的点标示为待画矩形的左上顶点{point1=point;}CView::OnLButtonDown(nFlags,point);}voidCPolyAlignView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCClientDCdc(this

6、);if(m_pDrawRet==TRUE)//矩形已被画出,执行以下代码画多边形{if(m_pDraw==FALSE)//鼠标第一次按下画一条从按下到弹起的直线{dc.MoveTo(m_pOrigin);dc.LineTo(point);//画出的多变形的起点和终点临近,默认重合m_strpo[cnt++]=point;}m_pOrigin=point;m_pDraw=TRUE;//标示鼠标已经按下}else//矩形未画则画一个左上顶点为point1,右下顶点为point2的矩形{point2=point;dc.Rect

7、angle(point1.x,point1.y,point2.x,point2.y);m_pDrawRet=TRUE;//标示矩形已画出}CView::OnLButtonUp(nFlags,point);}在菜单栏中添加一个选项,去掉popup,ID改为IDC_CUT1,caption”为裁剪”,进入classwizard,在CVIEW中添加响应函数,编辑代码voidCPolyAlignView::OnCut1(){//TODO:Addyourcommandhandlercodehere/*起始多边形第一个端点和最后一个端

8、点重合,故而不用考虑漏掉m_strpo[]的第一个端点的情况。i==cnt-1时,m_strpo[i+1]相当于其他情况的最后一个顶点到起始端点的情况。若要增加通用性,可以先cnt--,然后m_strpo[i+1]改为m_strpo[(i+1)%cnt]*/inti=0,j=0;for(i=0,j=0;

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

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

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