多边形裁剪一:Sutherland-Hodgman算法

Sutherland-Hodgman算法

         Sutherland-Hodgman算法也叫逐边裁剪法,该算法是萨瑟兰德(IESutherland)和霍德曼(Hodgman)1974年提出的。这种算法采用了分割处理、逐边裁剪的方法。

一,基本思想:

         一次用窗口的一条边裁剪多边形。

        考虑窗口的一条边以及延长线构成的裁剪线该线把平面分成两个部分:可见一侧;不可见一侧。多边形的各条边的两端点SP。它们与裁剪线的位置关系只有四种

情况(1)仅输出1个顶点P

情况(2)输出0个顶点;

情况(3)输出线段SP与裁剪线的1个交点I

情况(4)输出线段SP与裁剪线的1个交点I1个终点P

二、算法实现:

  1、已知:多边形顶点数组src,顶点个数n
       定义新多边形顶点数组dest

  2、赋初值:用变量flag来标识:
          0表示在内侧,1表示在外侧。

 3、对多边形的n条边进行处理,对当前点号的考虑为:0n-1
   for(i=0i<ni++)
   
{
    if(当前第i个顶点是否在边界内侧?)

   {
     if(flag!=0) /*前一个点在外侧吗?
*/
     
{
      flag=0/*从外到内的情况,将标志置0,作为下一次循环的前一点标志
*/
      (dest + j) =求出交点; /*将交点dest放入新多边形*/

j++
     }
     

     (dest + j)= (src + i) /*将当前点srci放入新多边形*/

j++
    }
    
else
    
{
     if(flag==0) /*前一个点在内侧吗?
*/
     
{
      flag=1/*从内到外的情况,将标志置1,作为下一次循环的前一点标志
*/
      (dest + j) =求出交点; /*将交点dest放入新多边形*/

j++
     }
    
}
    s= (src + i) /*将当前点作为下次循环的前一点
*/
   }

三,算法特点:

  Sutherland-Hodgeman多边形裁剪算法具有一般性,被裁剪多边形可以是任意凸多边形或凹多边形,裁剪窗口不局限于矩形,可以是任意凸多边形。
  上面的算法是多边形相对窗口的一条边界进行裁剪的实现,对于窗口的每一条边界依次调用该算法程序,并将前一次裁剪的结果多边形作为下一次裁剪时的被裁剪多边形,即可得到完整的多边形裁剪程序。


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值