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 X i+1 = x i + dx = x i +1 Y i+1 = y i + dy = y i + k Y i+1 zaolrouhlím na celé číslo
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 x i,y i x i +1,y i x i +1,y i +1 d2d2 d1d1 y = kx + b y* = k(x i +1) + b d 1 = y*– y i = k(x i +1) + b - y i d 2 = y i + 1 –y* = y i k(x i +1) - b y*
Bresenhamův algoritmus x i,y i x i +1,y i x i +1,y i +1 d2d2 d1d1 Δd = d 1 – d 2 = 2k(x i +1) – 2y i +2b -1 Pro Δd kladné použiji bod y i +1 Pro Δd záporné použiji bod y i y*
Bresenhamův algoritmus Δd = d 1 – d 2 = 2*Δy/Δx*(x i +1) – 2y i +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í. p i = Δd Δx = 2Δyx i + 2Δy – 2Δx y i + Δx (2b-1) Hodnota p i se nazývá i-tá predikce
Výpočet následující predikce p i+1 = 2Δy(x i +1) + 2Δy – 2Δx y i+1 + Δx (2b-1) p i+1 = p i + 2Δy – 2Δx( y i+1 - y i ) Pro p i záporné položím y i+1 = y i a p i+1 = p i + 2Δy Pro p i nezáporné položím y i+1 = yi + 1 p i+1 = p i + 2Δy – 2Δx( y i+1 - y i ) Počáteční hodnota p 1 = 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.