多边形裁剪:Sutherland-Hodgman算法

一.基本思想

采用了分割处理、逐边裁剪的方法。将多边形边界作为一个整体,一次用窗口的一条边裁剪多边形,裁剪得到的中间结果多边形再作为输入,使用窗口多边形的另一条边对其进行裁剪,直到窗口多边形所有边都对其裁剪完毕。

考虑窗口的一条边以及延长线构成的裁剪线该线把平面分成两个部分:可见一侧;不可见一侧。多边形的各条边的两端点S、P。它们与裁剪线的位置关系只有四种。
在这里插入图片描述
判断多边形各条边与裁剪线的位置关系伪代码:
在这里插入图片描述

二.算法特点

思考:算法的输出是裁剪后保留的点序列吗?答:是的
算法优点:裁剪窗口不局限于矩形,可以是任意凸多边形,比如下面一个例子:
在这里插入图片描述

算法不足:
(1)只能裁剪凸多边形,如果是凹多边形会出现什么样的结果?
如下图:结果多边形应该是两个分离的封闭多边形才正确,但是这里就是两个连着的封闭多边形

(2)裁剪窗口不能是凹多边形,如果裁剪窗口是凹多边形,会出现什么样的结果?在这里插入图片描述

算法改进:
比如可以将凹多边形分割成多个2个或者更多个凸多边形再去运行该算法。

三.算法运行

(1)图中裁剪窗口的左边界:
在这里插入图片描述
在这里插入图片描述
(2)下边界:
在这里插入图片描述
其余自推…

裁剪得到的结果多边形的顶点有两部分组成:
(1)落在可见一侧的原多边形顶点
(2)多边形的边与裁剪窗口边界的交点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值