图形学学习笔记4——平面图形裁剪

平面图形裁剪

基础概念

空间中的图形尺寸任意,显示设备尺寸有限,如何判断图形哪些部分在显示区外,哪些部分在显示区内这一过程就是对图形的裁剪。

当有大量图形需要显示时,裁剪就很耗时,在软件裁剪速度无法达到要求时,可以用硬件加速。

直线裁剪

求出所属直线与各个边界的交点,通过交点是在边界上还是在延长线上,判断线段哪部分在区域内。

科恩-萨塞兰德算法

适用于矩形窗口的直线裁剪。将窗口四条边所属直线分割成的9个区域编码,每条直线内侧(窗口一侧)编码0,外侧1.

这里写图片描述

将线段两个端点的编码作如下判断:

  1. 若编码都是0,则两点都可见。
  2. 作与运算,如果非0,说明至少在某条直线的外侧,肯定不在显示区。
  3. 否则需要进一步判断,计算线段与边界的交点,交点将线段分为两段,一段肯定不可见,舍去,继续判断另一段,重复1.

该方法需要求直线交点,需要精确计算。

中点分割法

科恩-萨塞兰德算法算法中第3步需要计算交点对线段分割,如果直接用中点分割,可移位操作。中点分割后的对两段分别再判断。精度到一定范围内,停止分割。
对编码方式无法判断线段完全在区域内或区域外的情形,计算中点,中点有如下情况:

  1. 若中点在边界或区域外,那么分割出来的两段线段中,一定有一段在区域外,舍去。继续判断另一段。
  2. 若中点在区域内 且 有一个端点在区域内,那么其中一段完全可见,另一段继续判断。
  3. 若中点在区域内 且 两个端点都在区域外,那么该线段与边界有两个交点,分别对两段继续分割。
  4. 若分割的线段长度小于精度阈值,此时就认定中点即为交点。

梁友栋-Barsky算法

基本思想:对于非水平或竖直的直线,如果穿过矩形区域,则有必定有先穿过一组横纵边界所在直线,再穿过另一组横纵边界所在实现。

这里写图片描述

如上图所示线段pq所在直线与边界直线交于a,b,c,d四个点。如果直线是水平或竖直,很容易计算裁剪区域,此处只考虑斜线。

此处只考虑k>0的情形(k<0类似推到),如果该线段有部分在区域内。必定先经过两条直线 lleftlbottom ,再经过两条直线 lrightltop 。设线段两端点 xp<xq ,定义一个正方向 pq Δx=xqxp </

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值