Rasterizace seky DDA algoritmus Dynamic Decrease algoritmus Pro

  • Slides: 15
Download presentation
Rasterizace úsečky

Rasterizace úsečky

DDA algoritmus • Dynamic Decrease algoritmus • Pro začátek popis pro úsečky se směrnicí

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

DDA algoritmus Δx = x 2 – x 1 , Δy = y 2 – y 1, 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

DDA algoritmus • Základní nevýhoda: pracuje s neceločíselnou aritmetikou

DDA algoritmus • Základní nevýhoda: pracuje s neceločíselnou aritmetikou

Bresenhamův algoritmus • Jack Elton Bresenham (* 1937) • Zaměstnanec IBM a Winthrop University

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 y = kx + b xi+1, yi+1 d 2 y* d 1

Bresenhamův algoritmus y = kx + b xi+1, yi+1 d 2 y* d 1 = y*– yi = k(xi+1) + b - yi d 2 = yi + 1 –y* = + 1 - k(xi+1) - b d 1 xi, yi y* = k(xi+1) + b xi+1, yi yi

Bresenhamův algoritmus xi+1, yi+1 d 2 y* Pro Δd kladné použiji bod yi+1 Pro

Bresenhamův algoritmus xi+1, yi+1 d 2 y* Pro Δd kladné použiji bod yi+1 Pro Δd záporné použiji bod yi d 1 xi, yi Δd = d 1 – d 2 = 2 k(xi+1) – 2 yi +2 b -1 xi+1, yi

Bresenhamův algoritmus • Δd = d 1 – d 2 = 2*Δy/Δx*(xi+1) – 2

Bresenhamův algoritmus • Δd = d 1 – d 2 = 2*Δy/Δx*(xi+1) – 2 yi +2 b -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 (2 b-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

Výpočet následující predikce • pi+1 = 2Δy(xi+1) + 2Δy – 2Δx yi+1 + Δx (2 b-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 p 1 = 2 Δy – Δx

Další varianty Směrnice větší než 1 → řídící osa y.

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ě

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 x 1 > x 2 • Úsečka vede „zprava doleva“. Buď řešit

Varianty pro x 1 > x 2 • Úsečka vede „zprava doleva“. Buď řešit zvlášť (4 další varianty), nebo prohodit body x 1 a x 2.

Svislá úsečka (x 1 = x 2) Vůbec nemá směrnici, nutno řešit samostatným jednoduchým

Svislá úsečka (x 1 = x 2) Vůbec nemá směrnici, nutno řešit samostatným jednoduchým algoritmem.

Jádro programu Bressenham DELTA_Y: =Y 2 -Y 1; DELTA_X: =X 2 -X 1; K

Jádro programu Bressenham DELTA_Y: =Y 2 -Y 1; DELTA_X: =X 2 -X 1; K 1: =2*DELTA_Y; K 2: =2*(DELTA_Y-DELTA_X); PREDIKCE: =2*DELTA_Y-DELTA_X; X: =X 1; Y: =Y 1; bod (X, Y, BARVA); {vykresli pocatecni bod} while X<=X 2 do begin X: =X+1; if PREDIKCE > 0 then begin Y: =Y+1; PREDIKCE: =PREDIKCE+K 2 end else PREDIKCE: =PREDIKCE+K 1; bod(X, Y, BARVA); {vykresli dalsi bod} end; {konec vykreslovani usecky}