2010年8月10日 星期二

LCD 如何顯示線條

  ....資料來源, 名為 computer graphics 的書, chapter 2, Scan Conversion Techniques, 作者是 A.P. Godse (在 google 圖書內 online 查看), 書內採用 linear equation 數學方程式原理配合類似 BASIC 的電腦語言來講解運算方法, 不算太艱深, 自己亦睇得明 (其實還提供了 C 語言, 但自己睇唔明), 以下是將書內容 "消化" 後得出的見解.....  

...對於繪畫直線條黎講, 點樣將 vector 線條顯示在一點點的 lcd 上呢? 可使用名為 Bresenham's Line Algorithm 的計算方法, 原理是取得頭尾兩個 pixels 的座標值之後(用 mouse 畫直線時所 click 選的兩個 points), 利用 "接近法" 遂一計算出第 2, 3, 4 ....的 pixels (頭 pixel 唔需要計算, 因為用 mouse 畫線時已被定出, 至於最尾的 pixel , 雖然亦已被定出, 但仍然會再用方程式計算一次 ), 所謂 "接近法",  是量度 pixel 中心點和 Vector 線之間的距離, 並選用距離較短的 pixel...
....例如頭尾兩個 pixels 分別為 (0,0) 及 (10,10), 這時第二個 pixel 便會是 (1,1), 因為 vector 直線會直接穿過這個 pixel 的中心點, 但若將尾 pixel 改為 (10,8) 的話, 這時 vector 直線便會位於 (1,1) 和 (1,0) 上下兩個 pixels 之間, 由於較接近上面的 pixel, 所以便選用了 (1,1), 其它行數計算方法相同....
.....咁駛唔駛計埋橫行呢? 答案是當 vector 直線斜度超過 45 度時便要改為採用橫行的 pixels, 否則便會出現錯誤, 例如頭尾兩個 pixel 是 (0,0) 及 (1,10) , 其直線斜度差不多有 90 度, 而且只有兩行打直, 若依然用打直的方法來計算的話, 每行取一個 pixel , 總數便只有兩個 pixels, 無法形成一條直線 (改用打橫 pixels 後, 第一直行會佔用 5 個 pixels, 第二直行亦佔用 5 個 pixels 而形成一條直線)....
...也可使用名為 DDA Algroithm 的計算方法, 但由於有弱點, 所以較小採用, 弱點包括 (1) 由於要用小數來運算, 計算速度較慢, 即是所謂的 floating point, 這是電腦的弱項(待查近年的 cpu 是否已不再存在這問題), 而前述計算方法則採用整數(integer)來運算, (2) end point 位置可能會出現偏差 , 即是經由方程式計算出來的 end point 並不能保証會等同 mouse-click 時的 point, 而前者的計算方法則完全準確...

沒有留言:

張貼留言