计算机图形学 - 线段裁剪 - Liang Barsky算法(梁友栋算法)

版权声明:本文为博主原创文章,欢迎转载,转载请贴上博客地址 http://blog.csdn.net/xdg_blog https://blog.csdn.net/xdg_blog/article/details/52848900
算法描述:

  Liang_Barsky算法的基本出发点是直线的参数方程。给出任意一条直线段,两端点分别为,令 则直线的参数方程为:
  
  如果直线上任意一点位于窗口内,则必须满足下列关系式:
  
  上述不等式可以表示为:
  
其中p和q定义为:

  

  任何一条直线如果平行于某一条裁剪边界,则有,下标k 对应于直线段平行的窗口边界(,并且分别表示裁剪窗口的左、右、下、上边界)。如果对于某一个k值,满足,那么直线完全在窗口的外面,可以抛弃。如果,则该直线在它所平行的窗口边界的内部,还需要进一步计算才能确定直线是否在窗口内、外或相交。当时,表示直线是从裁剪边界的外部延伸到内部,如果,则表示直线是从裁剪边界的内部延伸到外部的。对于pk≠0,可以利用式 计算出直线与边界k的交点的参数u。
对于每一条直线,可以计算出直线位于裁剪窗口内线段的参数值
的值是由那些使得直线是从外部延伸到内部的窗口边界决定。
  对于这些边,计算值取以及0构成的集合中的最大值。
  的值是由那些使得直线是从内部延伸到外部的窗口边界决定的。
  计算出和1构成的集合中的最小值。如果,这条直线完全在窗口的外面,可以简单抛弃,否则根据参数u的两个值,计算出裁剪后线段的端点。

详细代码:计算机图形学 - Code 1

生成结果:

猜你喜欢

转载自blog.csdn.net/xdg_blog/article/details/52848900