二维图形裁剪篇

小白谈计算机图形学(三)二维图形裁剪篇之Cohen-Sutherland代码裁剪算法,中点分割裁剪算法,Liang-Barsky算法详解



引言

管中窥豹,坐井观天,自然界中有一个个窗口让我们观察她的曼妙。计算机也有这样的窗口,让我们在全部中观察局部的现象。这里我们谈谈二维图形的裁剪。



如何裁剪

假定直线段用 p1(x1,y1)、 p2(x2,y2)表示。直线段和剪裁窗口的可能关系:

  • 完全落在窗口内
  • 完全落在窗口外
  • 与窗口边界相交
    在这里插入图片描述



Cohen-Sutherland代码裁剪算法



基本思想

以窗口为基准进行分区,再以 D3​D2​D1​D0​ (上下右左) 以外赋1,以内赋0的二进制形式给每个区命名,随之进行位与运算进行分析。
在这里插入图片描述



Cohen-Sutherland操作步骤

  • code1=0且code2=0,则该线段在窗口内,取之。
  • code1和code2 按位进行与运算,其结果不为0,即code1&code2≠0,则两端点必在窗口外的同一部位,弃之。
  • 都不成立,此时需要求出直线段与窗口边界的交点,在交点处把线段一分为二,其中必有一段完全在窗口以外,弃之。根据交点位置赋予新的四位编码,直到code1=0且code2=0为止。

优点:利用编码的思想,实现了对完全可见和不可见直线段的快速接受和拒绝。
缺点:部分可见查找较慢。



中点分割裁剪算法(对分法)

基本思想

同样对直线段端点进行分区编码,对前两种情况进行一样的处理。



线段和窗口有交点情况

  • 核心思想:通过二分法逼近来确定直线与窗口的交点,由于到达像素级别便不再可分,故不会无限循环下去。
    在这里插入图片描述
  • 从 p1​出发,找出离 p1​最近的可见点  A; 从p2​出发,找出离 p2​最近的可见点 B;  AB为 p1​p2​的可见部分。

缺点:代码裁剪与矢量裁剪都要计算直线段与窗口边界的交点,大量乘除运算降低执行效率



Liang-Barsky算法



Liang的初发现

  • 参数方程表示直线段

                                                         

  • 在这里插入图片描述
  • 把直线段看成一条有方向的线段,把窗口分为入边(直线由窗口外向窗口内移动,即左边界和下边界)和出边(直线由窗口内向窗口外移动,即右边界和上边界)加上自身总共6个点在这里插入图片描述



如何判断入边出边?如何判断 u值?

判断一条线在窗口内的部分即判断窗口内点的取值范围,接下来所有推导将都会使用到起点 p1​(x1​,y1​):

                                                  

我们得到点关于窗口四边的四个不等式,同时我们进行优化:

                                                  

即满足上述条件就是我们寻找的点,那么我们想到当取等号即 u=pk​/qk​​的时候,即是入边与出边四点:
在这里插入图片描述
那么如何判断入边和出边呢:由 pk​判断,这里不明白可以点击进行学习
 pk​<0时为入边, pk​>0时为出边,所以得Liang-Barsky算法的式子:

                                          

得到最大最小的值
在这里插入图片描述



Liang-Barsky算法特点

  • 直线方程参数化
  • 直线段看成有方向的
  • 把窗口的四条边分为入边和出边



超链接

‎如果你还想了解其他内容:‎
‎ ‎‎小白谈计算机图形学(一)如何画线‎
‎ ‎‎小白谈计算机图形学(二)如何画圆‎
‎ ‎‎小白谈计算机图形学(三)二维图形裁剪‎
‎ ‎‎小白谈计算机图形学(四)二维三维图形变换—1 ‎

(67条消息) 【计算机图形学】小白谈计算机图形学(三)二维图形裁剪篇之Cohen-Sutherland代码裁剪算法,中点分割裁剪算法,Liang-Barsky算法详解_一拳Marx-CSDN博客

おすすめ

転載: blog.csdn.net/tjcwt2011/article/details/121354387