直线裁剪算法(Cohen-Sutherland,中点裁剪,Liang-Barsky)

博客介绍了线段裁剪的概念,即确定图形哪些部分在显示区内、外。详细阐述了Cohen - Sutherland、中点分割、Liang - Barsky三种裁剪算法的原理、操作及存在的问题,并对三种算法进行小结和比较,指出各算法的优缺点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是裁剪:确定图形哪些部分落在显示区之内,哪些落在显示区外。这个选择的过程就称为裁剪。

1.Cohen-Suther land算法

(1)若端点完全在裁剪窗口内----“简取”之
在这里插入图片描述
(2)若端点完全在裁剪窗口外,且满足下列四个条件之一----“简弃”之
在这里插入图片描述
(3)既不满足简取,也不满足简弃:对直线段按交点进行分段,分段后判断直线是“简取”还是“简弃”,每条线段的端点都赋以四位二进制码D3D2D1D0(上下右左)
裁剪的具体操作:
裁剪一条线段时,先求出端点P1,P2的编码code,然后进行二进制“或”和“与”运算
(1)若code1|code2=0,对直线段简取
(2)若code1&code2不等于0,对直线段简弃
(3)若上述两条件都不成立,则需要求出直线段与窗口边界的交点,并在交点处把直线段一分为二
(4)存在问题:一条完全在窗口外的直线,进行与运算=0,还需求交点,然后所得结果还是全部舍弃

2.中点分割算法

1、核心思想:通过二分逼近来确定直线段与窗口的交点
2、注意:
1>若中点不在窗口内,则把中点和离窗口边界最远点构成的线段丢掉,线段上的另一点和该中点再构成线段求其中点
2>若中点在窗口内,则以中点和最远点构成线段,求其中点,直到中点与窗口边界的坐标值在规定的误差范围内
3、问题:中点分割算法会不会无限循环下去?
不会。因为屏幕像素是有限的,一般计算次数不会太多,而且允许在误差范围内

3.Liang-Barsky裁剪算法

1、主要思想:用参数方程表示一条直线段(0<=U<=1)
X=X1+U*(X2-X1)=X1+U△X
Y=Y1+U
(Y2-Y1)=Y1+U*△Y
2、把直线看成是一条有方向的线段,把窗口的四条边及其延长线分成两类:入边和出边
入边:左边界和下边界
出边:右边界和上边界
在这里插入图片描述
如何求出起点和终点的坐标?(即起点和终点的参数值u
在这里插入图片描述
计算举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.算法小结和比较

Liang-Barsky:
1>直线方程参数化
2>直线段是有方向的
3>把窗口的四条边分成入边和出边

Cohen-Sutherland:
优点:利用编码的思想,实现了对完全可见和不可见直线段的快速接受和拒绝。比较适合两种情况:一是大部分线段完全可见,二是大部分线段完全不可见。
缺点:部分可见查找较慢,计算直线段与窗口边界的交点,大量乘除运算降低执行效率。一条完全在窗口外的直线,进行与运算=0,还需求交点,然后所得结果还是全部舍弃,如下图:
在这里插入图片描述

中点裁剪:
优点:避免了cohen-Sutherland中的大量求交运算,只需要计算中点,比较适合硬件。
缺点:需要求得一个点收敛于交点,需要执行大量循环。

Cohen-Suther land算法和Liang-Barsky算法比较:
1、Cohen-Suther land算法的核心思想是编码,窗口和延长线把空间分成了9个区域
2、线段要么大部分在窗口外,要么大部分在窗口内,使用Cohen-Suther land效果好
3、一般情况下(线段贯穿窗口),优先使用Liang-Barsky算法
4、两者均只能应用于矩形窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值