是用于确定图像中哪些部分位于视窗 (Viewport) 内部或外部的过程。在计算机图形学中,计算机屏幕充当一个二维坐标系。一个物体 / 场景的每一个点都能在计算机屏幕上显示出来是不可能的。我们只能看到位于特定范围内的点。

点裁剪
判断一个点是否位于指定的裁剪区域内部,并据此决定是否保留该点的过程。
在二维图形中,一个点的坐标 需要满足以下条件,才能被视为位于裁剪窗口内:
- 左边界:
- 右边界:
- 下边界:
- 上边界:
如果点满足上述所有条件,则该点在裁剪区域内;否则,该点被裁剪掉。


线裁剪
用于确定和裁剪一条线段,使其完全位于窗口内。
- if completely inside
- if completely outside
- if not completely inside or outside → intersection calculation
Cohen Sutherland 算法
基本过程
- 将视窗划分为 个相等的区域
- 对裁剪窗口及其外部区域进行编码
- 每个点根据其位置分配一个 位的二进制码。
- 位的分配取决于 “TBRL”(上、下、右、左)规则。
- 如果一个点位于某个特定的角落位置,则该角落的值为 ,否则为 。


- 分类线段
- 完全可见:如果两个端点的区域代码都是 0000(即在线内),直接绘制整条线段。
- 完全不可见:如果两个端点的区域代码 AND 操作的结果不为 0000,则线段完全在窗口外,可以直接丢弃。
- 部分可见:如果两个端点的区域代码 AND 结果为 0000 且至少一个端点的编码不是 0000,则线段需要裁剪。
- 完全可见:
- 完全不可见:
- 部分可见 / 需要裁剪:

- 裁剪线段:对部分可见的线段,按照以下步骤裁剪:
- 从窗口边界开始,使用区域编码找到线段与窗口边界的交点。
- 用「交点」替代窗口外的端点,更新区域编码。
- 重复上述过程,直到线段完全位于窗口内或被判定不可见。
- 是线段的斜率
- 和 是线段的两个端点
- 是线段所在直线的一般方程
- 裁剪上边界:固定 ,求 。
- 裁剪下边界:固定 ,求 。
- 裁剪右边界:固定 ,求 。
- 裁剪左边界:固定 ,求 。
例题
裁剪窗口:
线段端点
- 起点:
- 终点:
,需要裁剪左边界:
裁剪后,线段的「新起点」为 。
,需要裁剪右边界:
裁剪后,线段的「新终点」为 。
Liang Barsky 算法
比 Cohen Sutherland 算法更为高效,使用了「参数方程」,避免了多次交点计算
基本过程
线段起点为 ,终点为
- 计算 和
- 左边界 ()
- 右边界()
- 下边界()
- 上边界()
- 计算 (Time interval),表示线段在裁剪窗口内的有效区间。
- 起点:
- 终点:
- 计算参数方程
- 检查线段和边界相交情况:对于每一个边界 ,进行以下步骤
- 如果 (即线段与边界平行),检查线段是否完全在边界内:
- ,则线段完全在边界外,需要丢弃该线段。
- ,则线段完全在边界内,保持该线段。
- 如果 ,计算线段与边界的交点
- ,则线段进入了窗口,更新 (取二者最大值)
- ,则线段离开了窗口,更新 (取二者最小值)
- 裁剪线段:在计算完 和 后
- 如果 ,表示线段与窗口相交,裁剪后的线段的端点为:
- 如果 ,表示线段完全在窗口外,丢弃该线段。
多边形裁剪
Sutherland Hodgeman 算法
Weiler Atherton 算法
利用多边形来裁剪另一个多边形的方法

基本过程
- 创建两个列表:
- 被裁剪多边形列表:按顺序写下被裁剪的多边形 (Subject Polygon) 的顶点
- 裁剪窗口列表:按顺序写下裁剪窗口 (Clipped Polygon ) 的顶点
- 创建交点列表 (A list for intersection points)
- 从第一个交点起点出发,沿着被裁剪多边形列表的顶点前进
- 遇到裁剪窗口的边,切换到另一个列表,沿着它的顶点前进
- 当回到起点时结束
(交点的计算依通常涉及判断两条线段是否相交,并计算坐标)
- 构建裁剪后的多边形:根据交点和原多边形的边,按顺时针或逆时针方向重新排列顶点,形成裁剪后的多边形。
例题
Subject Polygon | Clipped Polygon |
(Start) | |
(End) | |
→ | (End) |
(Start) | |
→ | ㅤ |
ㅤ | |
ㅤ |


最后生成两个新多边形 和
文本裁剪
All-or-none string-clipping
- 如果整个字符串完全在裁剪窗口内,保留它。
- 否则,丢弃该字符串。

All-or-none character-clipping
- 只丢弃那些完全位于窗口外的字符部分。

Individual characters clipping
- 裁剪单个字符的组成部分。






