直线段的三种裁剪算法
一、Cohen-Sutherland

(1)求出点 P1 和 P2 所在区域的区域代码 C1 和 C2
(2)根据区域代码判断直线相对于窗口的位置:
若C1 = C2 = 0,两个点在窗口内,应该予以保留。
若C1 & C2 ≠ 0,两个点在同一侧,应该予以舍弃。
若C1 & C2 = 0, 两个点不在同一侧,求出交点。
(3)求交点
将C1和C2分别与四条边对应的区域代码作&运算,当两者不为零时,说明该点与这条边有交点。然后根据直线方程和该边的坐标值求出交点。
🔺缺点:求出的交点可能是直线的延长线上的点。
二、Liang-Barsky
(1)两点的坐标值 X1,Y1, X2,Y2,窗口的坐标值 Xmin,Ymin,Xmax,Ymax,以及 △x 和 △y
(2)求出Pk,Qk,Uk

(3)求出 t1,t2
(4)若 t1 < t2,求出两点的坐标
xx1 = x1 + t1*△x
xx2 = x1 + t2*△x
yy1 = y1 + t1*△y
yy2 = y1 + t2*△y

参考资料链接:
使用伪代码解释 liang-barsky-line-clipping-algorithm
------------恢复内容开始------------
一、Cohen-Sutherland

(1)求出点 P1 和 P2 所在区域的区域代码 C1 和 C2
(2)根据区域代码判断直线相对于窗口的位置:
若C1 = C2 = 0,两个点在窗口内,应该予以保留。
若C1 & C2 ≠ 0,两个点在同一侧,应该予以舍弃。
若C1 & C2 = 0, 两个点不在同一侧,求出交点。
(3)求交点
将C1和C2分别与四条边对应的区域代码作&运算,当两者不为零时,说明该点与这条边有交点。然后根据直线方程和该边的坐标值求出交点。
🔺缺点:求出的交点可能是直线的延长线上的点。
二、Liang-Barsky
(1)两点的坐标值 X1,Y1, X2,Y2,窗口的坐标值 Xmin,Ymin,Xmax,Ymax,以及 △x 和 △y
(2)求出Pk,Qk,Uk

(3)求出 t1,t2
(4)若 t1 < t2,求出两点的坐标
xx1 = x1 + t1*△x
xx2 = x1 + t2*△x
yy1 = y1 + t1*△y
yy2 = y1 + t2*△y

参考资料链接:
使用伪代码解释 liang-barsky-line-clipping-algorithm
------------恢复内容结束------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?