直线段的三种裁剪算法

一、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

  使用伪代码解释 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

  使用伪代码解释 liang-barsky-line-clipping-algorithm

 

------------恢复内容结束------------

posted @   浪浪~  阅读(439)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示