若是按线段的方法裁剪,获得的是一系列线段。算法
而实际上,应该获得的是下图所示的有边界的区域:blog
多边形裁剪算法的输出应该是裁剪后的多边 形边界的顶点序列!bfc
须要构造能产生一个或多个封闭区域的多边 形裁剪算法方法
该算法的基本思想是将多边形边界做为一个总体,im
每次用窗口的一条边对要裁剪的多边形和中间结果多边形进行裁剪,d3
体现一种分而治之的思想db
把平面分为两个区域:img
包含有窗口区域的一个域称为可见侧;while
不包含窗口区域的域为不可见侧co
裁剪获得的结果多边形的顶点有两部分组成:
(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裁剪算法对凸多边形进行裁剪能够 得到正确的裁剪结果,可是凹多边形不行。