收藏 分享(赏)

多边形裁剪的Sutherland—Hodgman算法(计算机图形学).doc

上传人:精品资料 文档编号:10480739 上传时间:2019-11-21 格式:DOC 页数:8 大小:39KB
下载 相关 举报
多边形裁剪的Sutherland—Hodgman算法(计算机图形学).doc_第1页
第1页 / 共8页
多边形裁剪的Sutherland—Hodgman算法(计算机图形学).doc_第2页
第2页 / 共8页
多边形裁剪的Sutherland—Hodgman算法(计算机图形学).doc_第3页
第3页 / 共8页
多边形裁剪的Sutherland—Hodgman算法(计算机图形学).doc_第4页
第4页 / 共8页
多边形裁剪的Sutherland—Hodgman算法(计算机图形学).doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、多边形裁剪的 SutherlandHodgman 算法 1. SutherlandHodgman 多边形裁剪算法思想该算法的基本思想是每次用窗口的一条边界及其延长线来裁剪多边形的各边。多边形通常由它的顶点序列来表示,经过裁剪规则针对某条边界裁剪后,结果形成新的顶点序列,又留待下条边界进行裁剪,直到窗口的所有边界都裁剪完毕,算法形成最后的顶点序列,才是结果多边形(它可能构成一个或多个多边形)。当多边形一个顶点 Pi 相对于窗口某条边界及其延长线进行剪裁时,不外乎下列四种情况(即裁剪规则):1、顶点 Pi 在内侧,前一顶点 Pi-1 也在内侧,则将 Pi 纳入新的顶点序列;2、顶点 Pi 在内侧,

2、前一顶点 Pi-1 在外侧,则先求交点 Q,再将 Q、Pi 依次纳入新的顶点序列;3、顶点 Pi 在外侧,前一顶点 Pi-1 在内侧,则先求交点 Q,再将 Q 纳入新的顶点序列;4、顶点 Pi 与前一顶点 Pi-1 均在外侧,则顶点序列中不增加新的顶点。 2. SutherlandHodgman 多边形裁剪算法步骤考虑多边形相对于一条边界及其延长线进行裁剪的算法:1从主函数得到待裁剪多边形的顶点序列 P2、顶点序列数 n、窗口一条边界参数 xl(假如为矩形窗口的左边界);2赋初值:将顶点序列中的最后一个顶点赋给前一顶点 S;设置初始标志 flag:if(S 在边界内侧)flag=0;else

3、flag=1;设新的顶点序列数 j=0;3对多边形各顶点进行裁剪规则处理,结果放入新的多边形顶点序列 Q2中:for(对第一个顶点直到最后一个顶点,逐一处理)if(Pi 在边界内侧)if(flag!=0)flag=0;求交点并放入新的多边形顶点序列 Qj 中;j+;将当前顶点放入新的多边形顶点序列 Qj 中:Qj=Pi;j+;elseif(flag=0)flag=1;求交点并放入新的多边形顶点序列 Qj 中;j+;将当前顶点赋给 S:S=Pi;4做返回准备:将新的多边形顶点序列 Q 又逐一放回原多边形顶点序列 P 中:P=Q;将新的多边形顶点数 j 放回原多边形顶点数 n 中:n=j;/-多边

4、形裁剪的 SutherlandHodgman 算法-/void CMyClip_AView:ClipedgeL(CPoint polypoint, CPoint clipwindow, UINT polynum)/*其中参数 polypoint为多边形顶点,clipwindow为裁剪窗口顶点,polynum为多边形顶点数目*/ /找出裁剪窗口边界long xl,xr,yt,yb;UINT i;xl=clipwindow0.x;xr=clipwindow0.x;yt=clipwindow0.y;yb=clipwindow0.y;for(i=1;iclipwindowi.x)xl=clipwind

5、owi.x;if(xrclipwindowi.y)yb=clipwindowi.y;if(yt=xl Bm_nB.y =polypointi.y ;m_nB=m_nB+1;continue;if(polypointi.x=xl)/*边两个端点起点在外部,终点在内部,求交点,然后交点,终点都应该送入临时数组*/*保留交点*/x=xl;tem1=(xl-polypointi.x);/tem2=(xl-x1)*dy/dx+y1;/y/x=dy/dx-y=x*dy/dxtem2=tem1*(polypointi+1.y-polypointi.y)/(polypointi+1.x-polypointi.

6、x)+polypointi.y;y=tem2;Bm_nB.x =x;Bm_nB.y =y;m_nB=m_nB+1;continue;if(polypointi.x=xl Cm_nA.y =Bi.y;m_nA+;continue;if(Bi.y=yb)/p1 在下,P2 在上,留交点,外内y=yb;tem1=yb-Bi.y;/tem2=x1+(yb-y1)*dx/dytem2=tem1*(Bi+1.x-Bi.x)/(Bi+1.y-Bi.y) + Bi.x;x=tem2;Cm_nA.x =x;Cm_nA.y =y;m_nA+;continue;if(Bi.y=yb if(Ci.xxr Bm_nB.

7、y =Ci.y;m_nB+;/save 交点x=xr;tem1=Ci.x-xr;tem2=Ci.y-tem1*(Ci+1.y-Ci.y)/(Ci+1.x-Ci.x);y=tem2;Bm_nB.x =x;Bm_nB.y =y;m_nB+;continue;/三次裁剪后的新多边形if(i=m_nA)Bm_nB=B0;/上-m_nA=0;for(i=0;iyt if(Bi.yyt Cm_nA.y =Bi.y;m_nA+;/save 交点y=yt;tem1=Bi.y-yt;/tem2=x1+(yb-y1)*dx/dytem2=Bi.x-tem1*(Bi+1.x-Bi.x)/(Bi+1.y-Bi.y);x=tem2;Cm_nA.x =x;Cm_nA.y =y;m_nA+;continue;/形成裁剪后的多边形if(i=m_nB)Cm_nA=C0;CClientDC dc(this);CPen tempen;tempen.CreatePen(PS_SOLID,1,RGB(255,0,0);dc.SelectObject(tempen);dc.MoveTo(C0);for(i=1;i=m_nA;i+)dc.LineTo(Ci); /.

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报