DDA算法--计算机图形学
DDA算法
1.直線方程:笛卡爾斜率截距方程 y=mx+b。
通過轉換得到對于任何沿直線給定的x增量δx,對應的y增量δy
δy=mδx(1.1)
同樣,可以得出對應于指定的δy的x增量δx
Δx=δy/m(1.2)
對于具有斜率絕對值|m|<1的直線,可以設置一個較小的水平偏轉電壓δx,對應的垂直偏轉電壓可以通過(1.1)來定;而對于斜率值|m|>1的直線,則設置一個較小的垂直偏轉電壓δy,對應的水平偏轉電壓則由(1.2)計算出來的δx來設定;對于斜率m=1的直線,δx=δy,因為水平偏轉和垂直偏轉電壓相等。在每一種情況下,都可以在指定的斷電間生成一條斜率為m的光滑直線段。
解釋:當|m|<1的時候,δy<δx,此時δy的較小,誤差較大。所以通過提供δx來求δy,同理當|m|>1的時候,δx<δy,此時δx較小,誤差較大。
2.DDA算法:線段掃描轉換算法,基于(1.1)(1.2)來計算δx或δy。在一個坐標軸上以單位間隔對線段取樣,從而確定另一個坐標軸上靠近先路徑的對應整數值。
(1)假如斜率的絕對值小于等于1,并且起始點在左側,則以單位x間隔(δx=1)取樣,并逐個計算每一個y值
yk+1=yk+m。
下標k取整數值,從第一個點1開始遞增知道最后的斷電。由于m可以是0與1之間的任意實數,所以計算出的y值必須取整
(2)對于具有大于1的正斜率線段,則交換x和y的位置。也就是以點位y間隔(δy=1)取樣,順序計算每個x值
Xk+1=Xk+1/m;
此時,每一個計算出的x值要沿y掃描線舍人到最近的像素位置
(3)處理方向相反,即起始端點在右側,那么δx=-1,并且
yk+1=yk+m。
(4)當斜率大于1的時候,起始端點在右邊
Xk+1=Xk+1/m;
算法可以概括為一下的過程:輸入線段兩個端點的像素位置。端點位置間水平和垂直的差值賦給參數dx和dy。絕對值大的參數確定參數steps的值。該值也是在即將畫出的這條線段上的像素數目;按照這個數值,沿線段路徑計算每一步的下一個像素位置。先繪制位置(x0,y0)的像素,然后調整每一步的x和y,獲得并逐一繪制余下的像素。假如dx的絕對值大于dy的絕對值,且x0小于xEnd,那么x和y方向的增量值分別為1和m。加入x方向的比較大,單x0大于xEnd ,那么就采用減量-1和-m來生成線段上的每個點。在其他情況下,y方向使用單位增量(或減量),x方向使用1/m的增量(或減量)。
參考資料《計算機圖形學第四版》
總結
以上是生活随笔為你收集整理的DDA算法--计算机图形学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go kegg_KEGG分析及可视化
- 下一篇: DELL安装不了mysql_Window