1. 程式人生 > >中點分割直線段裁剪演算法

中點分割直線段裁剪演算法

中點分割演算法原理

中點分割直線段裁剪演算法對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次。主要過程只用到加法和除法運算,適合硬體實現,它可以用左右移位來代替乘除法,這樣就大大加快了速度。