Upload
lihua
View
52
Download
0
Embed Size (px)
DESCRIPTION
Rasterizace úsečky. DDA algoritmus. Dynamic Decrease algoritmus Pro začátek popis pro úsečky se směrnicí mezi 0 a 1 (řídící osa x) Dalších 8 variant se udělá symetricky. DDA algoritmus. Δ x = x 2 – x 1 , Δ y = y 2 – y 1 , k= Δ y/ Δ x dx = 1, dy = k*dx = k - PowerPoint PPT Presentation
Citation preview
Rasterizace úsečky
DDA algoritmus
• Dynamic Decrease algoritmus
• Pro začátek popis pro úsečky se směrnicí mezi 0 a 1 (řídící osa x)
• Dalších 8 variant se udělá symetricky
DDA algoritmus
Δx = x2 – x1 ,Δy = y2 – y1, k= Δy/Δx
dx = 1, dy = k*dx = k
Xi+1 = xi + dx = xi +1
Yi+1 = yi + dy = yi + k
Yi+1 zaolrouhlím na celé číslo
DDA algoritmus
DDA algoritmus
• Základní nevýhoda: pracuje s neceločíselnou aritmetikou
Bresenhamův algoritmus
• Jack Elton Bresenham (* 1937)
• Zaměstnanec IBM a Winthrop University (Rock Hill, Jižní Karolína, USA)
• Algoritmus z roku 1962
Bresenhamův algoritmus
xi,yixi+1,yi
xi+1,yi+1
d2
d1
y = kx + b
y* = k(xi+1) + b
d1 = y*– yi = k(xi+1) + b - yi
d2 = yi + 1 –y* = yi + 1 - k(xi+1) - b
y*
Bresenhamův algoritmus
xi,yixi+1,yi
xi+1,yi+1
d2
d1
Δd = d1 – d2 = 2k(xi+1) – 2yi +2b -1
Pro Δd kladné použiji bod yi+1
Pro Δd záporné použiji bod yi
y*
Bresenhamův algoritmus
• Δd = d1 – d2 = 2*Δy/Δx*(xi+1) – 2yi +2b -1
• Jediná neceločíselná hodnota ve vyorci je směrnice k = Δy/Δx. Vynásobím celý vzorec kladnou hodnotou Δx. Tím se smysl použití znaménka nemění.
• pi = Δd Δx = 2Δyxi+ 2Δy – 2Δx yi + Δx (2b-1)
• Hodnota pi se nazývá i-tá predikce
Výpočet následující predikce
• pi+1 = 2Δy(xi+1) + 2Δy – 2Δx yi+1 + Δx (2b-1) • pi+1 = pi + 2Δy – 2Δx( yi+1- yi) • Pro pi záporné položím
yi+1 = yi a
pi+1 = pi + 2Δy • Pro pi nezáporné položím
yi+1 = yi + 1
pi+1 = pi + 2Δy – 2Δx( yi+1- yi)
Počáteční hodnota p1 = 2 Δy – Δx
Další varianty
Směrnice větší než 1 → řídící osa y.
Další varianty
Směrnice záporná → drobné změny algoritmu, místo přičítání 1 odečítám 1.
Dvě varianty pro řídící osu x a y.
Varianty pro x1 > x2
• Úsečka vede „zprava doleva“. Buď řešit zvlášť (4 další varianty), nebo prohodit body x1 a x2.
Svislá úsečka (x1 = x2)
Vůbec nemá směrnici, nutno řešit samostatným jednoduchým algoritmem.
Jádro programu BressenhamDELTA_Y:=Y2-Y1; DELTA_X:=X2-X1;K1:=2*DELTA_Y; K2:=2*(DELTA_Y-DELTA_X);PREDIKCE:=2*DELTA_Y-DELTA_X;X:=X1; Y:=Y1;bod (X,Y,BARVA); {vykresli pocatecni bod}while X<=X2 do begin X:=X+1; if PREDIKCE > 0 then begin Y:=Y+1;
PREDIKCE:=PREDIKCE+K2 end else PREDIKCE:=PREDIKCE+K1;
bod(X,Y,BARVA); {vykresli dalsi bod}end; {konec vykreslovani usecky}