【Graphics】直线裁剪 Cohen-Sutherland

本文介绍Cohen-Sutherland直线裁剪算法的基本原理及实现步骤,通过使用位运算快速判断并裁剪超出指定窗口的直线部分。适用于计算机图形学中对直线的快速裁剪。

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

直线裁剪 Cohen-Sutherland 算法

Computer Graphics #001

编码

  • 把平面按照裁剪窗口分为九块,用四位二进制数表示每一块区域。
    在这里插入图片描述
    在 A 、C 、E 、G 四个区域分别填入 2i,  i∈{0,1,2,3}2^i,\;i\in\{0,1,2,3\}2i,i{0,1,2,3} (不要求位置对应)
    然后每个角落填入两个邻接块的值的或
    比如假设 A=(0001)2,  C=(0100)2A=(0001)_2,\;C=(0100)_2A=(0001)2,C=(0100)2 那么 B=A∣C=(0101)2B=A|C=(0101)_2B=AC=(0101)2

假设现在要裁剪线段 ℓ\ell
接下来只需要通过对线段 ℓ\ell 端点所属区域进行位运算来分类讨论
以下就都是高中数学内容了


裁剪

首先
0. 按位与和按位或结果相同表示线段完全在结果对应区域内
1. 按位或可以判断在剪裁区域 ( 0000 ) 中的线段(结果为 0000 )
2. 按位与可以判断在剪裁区域外且只过两个区域的线段 (结果为 2i

接下来不能直接判断,需要求线段所在直线与 0000 区域四边界所在直线的交点
首先,两线段端点按位或得到交点所在边界。

eg.
   C=(0010)2,  E=(0100)2,  G=(1000)2C=(0010)_2,\;E=(0100)_2,\;G=(1000)_2C=(0010)2,E=(0100)2,G=(1000)2
  D∣G=(1110)2D|G=(1110)_2DG=(1110)2

接下来重复:
求出 交点所在边界所在直线 与 线段 ℓ\ell 所在直线 的交点中的某一个。
将 所在区域编码 与 该交点所在区域编码 按位或结果非 0 的那个端点 用这个点替换
(也可以替换后得到新的直线重复整个算法,可能会快一点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值