電腦圖形學——點陣圖形學直線演算法簡介

來源:互聯網
上載者:User

標籤:

本文是對 趙明老師 《電腦圖形學》MOOC課程 部分章節的小總結。

 

直線是組成圖形的基礎,其演算法往往被多次調用,其好壞直接影響圖形的顯示效果和速度。以下是一些畫直線的常用演算法。

 

1、DDA演算法:

  此演算法基於增量思想。

  對於直線的斜截式:y=kx+b,考慮每次 x 遞增 1, 都有 y[i+1] = y[i] + k,這樣就將 kx 部分的乘法轉換成遞推的加法。

  由於像素點都是整數座標,所以每次求得的 y 都要取整操作,採用加 0.5 取整數部分的方法:(int)(y[i]+0.5)。

  但是,當 |k| > 1 時,由於 x 每次遞增 1,會導致取的光柵採樣點過稀,可能不足以近似趨近 理想的數學意義上的直線。

  該演算法的效率是:浮點數加法層級的。

 

2、中點畫線法:

  此演算法依然基於增量思想。

  對於直線的一般式:Ax+By+C=0,當|k|<1時,考慮每次 x 遞增 1,y[i+1] 都只可能等於 y[i] 或者 y[i]+1,它取決於對於中點誤差項的判斷。

  

  

  如何判斷Q在M的上方還是下方?把 M 點代入直線一般式:。

  所以中點畫線法的基本原理是:

  

  接下來的關鍵在於推匯出 d 的遞推式以將乘法運算轉換為加法運算。

  當 d0<0,也就是取 Pu 時,對於下一個點:

  ;

  當 d0>0,也就是取 Pd 時,對於下一個點:

  。

  

  

  (d只需要判斷其符號,故可以用2d放大消除浮點運算)。

 

3、Bresenham 演算法:

  

  

  

  

  

  並且演算法不依賴於直線方程的類型。

  

  

  這樣就將效率提高到了整數加法層級。

  

  

  且不依賴於直線方程的形式。

電腦圖形學——點陣圖形學直線演算法簡介

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.