多边形裁剪

一、多边形的裁剪

如果按线段的方法裁剪,得到的是一系列线段。

多边形裁剪

而实际上,应该得到的是下图所示的有边界的区域:

多边形裁剪

多边形裁剪算法的输出应该是裁剪后的多边 形边界的顶点序列!

需要构造能产生一个或多个封闭区域的多边 形裁剪算法

二、Sutherland-Hodgeman多边形裁剪

该算法的基本思想是将多边形边界作为一个整体,

每次用窗口的一条边对要裁剪的多边形和中间结果多边形进行裁剪,

体现一种分而治之的思想

多边形裁剪

把平面分为两个区域:

包含有窗口区域的一个域称为可见侧;

不包含窗口区域的域为不可见侧

 

多边形裁剪

裁剪得到的结果多边形的顶点有两部分组成:

(1)落在可见一侧的原多边形顶点

(2)多边形的边与裁剪窗口边界的交点

根据多边形每一边与窗口边所形成的位置关系,沿着多边形 依次处理顶点会遇到四种情况:

(1)第一点S在不可见  侧面,而第二点P在 可见侧

交点I与点 P均被加入到输 出顶点表中。

 多边形裁剪

(2)是S和P都在可见侧

 则P被加入到输出顶点表中

多边形裁剪

(3)S在可见侧,而P在不可见侧

则交点I被加入到输出顶点表中

多边形裁剪

(4)如果S和P都在不可见侧

输出顶点表中不增加任何顶点

多边形裁剪

在窗口的一条裁剪边界处理完所有顶 点后,其输出顶点表将用窗口的下一 条边界继续裁剪

 

 多边形裁剪

 

while对于每一个窗口边或面 do

  begin

    if P1 在窗口边的可见一侧 then 输出P1

    for i=1 to n do

    begin

     if P1 在窗口边的可见一侧 then

    if P1+1 在窗口边的可见一侧 then 输出 P1+1

     else 计算交点并输出交点

    else if Pi+1 在窗口可见一侧,then 计算交点

      并输出交点,同时输出Pi+1

    end

  end

end

 

Sutherland-Hodgeman算法不足之处

利用Sutherland-Hodgeman裁剪算法对凸多边形进行裁剪可以 获得正确的裁剪结果,但是凹多边形不行。

多边形裁剪