计算机图形学 dda,计算机图形DDA算法
本文概述
DDA代表數字差分分析儀。它是行掃描轉換的增量方法。在這種方法中, 計算是在每個步驟中執行的, 但要使用先前步驟的結果。
假設在步驟i, 像素為(xi, yi)
步驟i的方程式yi = mxi + b ………………….方程1
Next value will be yi+1=mxi+1+b……………..equation 2 m = yi+1-yi=?y…………………..equation 3 yi+1-xi=?x………………….equation 4 yi+1=yi+?y ?y=m?x yi+1=yi+m?x ?x=?y/m xi+1=xi+?x xi+1=xi+?y/m
情況1:當| M | <1時(假設x12)x = x1, y = y1設置?x = 1 yi + 1 = y1 + m, x = x + 1直到x = x2
情況2:當| M | <1時(假設y12)x = x1, y = y1設置?y = 1 xi + 1 =, y = y + 1直到y→y2
優點:
比直接使用線性方程式的方法要快。
此方法不使用乘法定理。
它使我們能夠檢測x和y值的變化, 因此不可能兩次繪制相同的點。
重新定位點時, 此方法會給出溢出指示。
這是一種簡單的方法, 因為每個步驟僅涉及兩個附加步驟。
壞處:
它涉及浮點加法四舍五入。舍入誤差的累積導致誤差的累積。
四舍五入操作和浮點操作會消耗大量時間。
更適合使用該軟件生成線。但是它不太適合硬件實現。
DDA算法
步驟1:開始算法
步驟2:將x1, y1, x2, y2, dx, dy, x, y聲明為整數變量。
步驟3:輸入x1, y1, x2, y2的值。
步驟4:計算dx = x2-x1
步驟5:計算dy = y2-y1
步驟6:如果ABS(dx)> ABS(dy), 則step = abs(dx)否則
第7步:xinc = dx / step yinc = dy / step分配x = x1分配y = y1
步驟8:設定像素(x, y)
第9步:x = x + xinc y = y + yinc設置像素(圓形(x), 圓形(y))
步驟10:重復步驟9, 直到x = x2
步驟11:結束算法
示例:如果使用DDA從(2, 3)到(6, 15)畫了一條線。生成該線需要多少點?
解決方案:P1(2, 3)P11(6, 15)
x1 = 2 y1 = 3 x2 = 6 y2 = 15 dx = 6-2 = 4 dy = 15-3 = 12 m =
為了計算x的下一個值, 需要x = x +
實現DDA線描算法的程序:
#include
#include
#include
void main()
{
intgd = DETECT , gm, i;
float x, y, dx, dy, steps;
int x0, x1, y0, y1;
initgraph(&gd, &gm, "C:\\TC\\BGI");
setbkcolor(WHITE);
x0 = 100 , y0 = 200, x1 = 500, y1 = 300;
dx = (float)(x1 - x0);
dy = (float)(y1 - y0);
if(dx>=dy)
{
steps = dx;
}
else
{
steps = dy;
}
dx = dx/steps;
dy = dy/steps;
x = x0;
y = y0;
i = 1;
while(i<= steps)
{
putpixel(x, y, RED);
x += dx;
y += dy;
i=i+1;
}
getch();
closegraph();
}
輸出:
對稱DDA
數字差分分析儀(DDA)根據其微分方程生成線。直線方程為
DDA的工作原理是, 我們以與x和y的一階導數成比例的小步長同時增加x和y。在直線的情況下, 一階導數是常數, 并且與?x和?y成比例。因此, 我們可以通過將x和y分別增加? ?x和? ?y來生成一條線, 其中?的數量很小。有兩種生成點的方法
1.在每個增量步長后四舍五入到最接近的整數, 四舍五入后, 我們在所得的x和y處顯示點。
2.舍入使用算術溢出的一種替代方法:x和y保留在具有整數和小數兩部分的寄存器中。都小于1的遞增值被重復加到小數部分, 每當結果溢出時, 相應的整數部分就會遞增。 x和y寄存器的整數部分用于繪制線。在對稱DDA的情況下, 我們選擇ε= 2-n, 其中2n-1≤max(| ?x |, | ?y |)<2π
用對稱DDA繪制的線如圖所示:
示例:如果使用對稱DDA從(0, 0)到(10, 5)繪制了一條線
1.執行多少次迭代?
2.將產生多少個不同的點?
解決方案:給定:P1(0, 0)P2(10, 5)x1 = 0 y1 = 0 x2 = 10 y2 = 5 dx = 10-0 = 10 dy = 5-0 = 0
P1(0, 0)將被視為起點P3(1, 0.5)點未繪制P4(2, 1)點已繪制P5(3, 1.5)點未繪制P6(4, 2)點已繪制P7(5, 2.5) )點未標繪P8(6, 3)點已標繪P9(7, 3.5)點未標繪P10(8, 4)點已標繪P11(9, 4.5)點未標繪P12(10, 5)點標繪
下圖顯示了使用這些點繪制的線。
總結
以上是生活随笔為你收集整理的计算机图形学 dda,计算机图形DDA算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Anaconda+vscode+pyto
- 下一篇: Maven学习笔记(2) --mvn a