中点分割直线段裁剪算法

版权声明:欢迎转载,请注明出处。 https://blog.csdn.net/jxch____/article/details/80726992

中点分割算法原理

中点分割直线段裁剪算法对Cohen-Sutherland直线裁剪算法的第3种情况做了改进,原理是简单地把起点为P0,终点为P1的直线段等分为两段直线P0P和PP1(P为直线段中点)对每一段直线重复“简取”和“简弃”的处理,对于不能处理的直线段再继续等分下去线,直至每一段直线完全能够被“简取”或“简弃”,也就是说直至每段直线完全位于窗口之内或完全位于窗口之外,就完成了直线段的裁剪工作。

中点计算公式

P = P 0 + P 1 2

基本思想

从P0点出发找出离P0最近的可见点,和从P1点出发找出离P1最近的可见点。这两个可见点的连线就是原线段的可见部分。
与Cohen-Sutherland算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况,对前两种情况,进行一样的处理;对于第三种情况,用中点分割的方法求出线段与窗口的交点。A、B分别为距P0 、 P1最近的可见点,Pm为P0P1中点。
这里写图片描述

求线段与窗口的交点

从P0出发找距离P0最近可见点采用中点分割方法

  1. 先求出P0P1的中点Pm
  2. 若P0Pm不是显然不可见的,并且P0P1在窗口中有可见部分,则距P0最近的可见点一定落在P0Pm上,所以用P0Pm代替P0P1;
  3. 否则取PmP1代替P0P1。
  4. 再对新的P0P1求中点Pm。重复上述过程,直到PmP1长度小于给定的控制常数为止,此时Pm收敛于交点。

从P1出发找距离P1最近可见点采用上面类似方法。

对分辩率为2N*2N的显示器,上述二分过程至多进行N次。主要过程只用到加法和除法运算,适合硬件实现,它可以用左右移位来代替乘除法,这样就大大加快了速度。

猜你喜欢

转载自blog.csdn.net/jxch____/article/details/80726992