Více o přímce, či úsečce, najdete zde.
DDA
Mějme přímku
pro kterou platí \Delta_y=y_B-y_A=1-0=1
\Delta_x=x_B-x_A=3-0=3
tedy
a=\frac{\Delta_y}{\Delta_x}=\frac{1}{3}
Pro každý následující bod tedy musíme přidat jednu jednotku ve směru y a tři ve směru x. Nezapomeňte, že pokud vykreslíte přímku jen mezi body A a B tak dostanete úsečku.
Všimněte si, že není důležitá přesná velikost \Delta_y a \Delta_x, ale jejich vzájemný poměr. Pro tyto dvě směrnice
a=\frac{2}{6}
a=\frac{0,5}{1,5}
dostaneme úplně stejnou přímku, která prochází počátkem, jak můžete vidět na obrázku.

Rasterizací dle DDA posuneme následující bod o jednu jednotku v jednom směru pevně a ve druhém směru pak v závislosti na směrnici.
Rasterizace úseček se sklonem <= 45°
Dle DDA posuneme následující bod pouze o jednu jednotku x a tomu odpovídající y dle směrnice. Zkusme pro přímku výše vypočítat \Delta_y pokud bude \Delta_x=1. a=\frac{1/3}{3/3}\doteq\frac{0,333}{1}
nebo prostě
a=\frac{1}{3}\doteq0,333
Obecně pak můžeme říct, že
x_{i}=x_{i-1}+1; y_{i}=y_{i-1}+a
Úsečku AB bude rasterizovat pro x=0..3.
x | 0 | 1 | 2 | 3 |
y | 0 | 0,3 (0) | 0,6 (1) | 0,9 (1) |
Do rastru nemůžeme přímo zanést body na reálných souřadnicích, musíme tedy zaokrouhlovat. Finální rasterizovaná úsečka je na obrázku.

Implementace
smernice = (yB-yA) / (xB-xA); y = yA; for(x = xA; x <= xB; x++) { putPixel(x,y); y = y + smernice; }Jednoduše kreslíme od počátečního x ke koncovému x a v každém kroku přičteme smernice k y. Je důležité dát pozor, aby první zadaný bod měl souřadnici x menší než druhý. Pokud by tomu tak nebylo, cyklus by neproběhl! Je tedy na začátku nutné body případně prohodit. Pro úsečku jako takovou je v našem případě jedno, je-li zadána AB nebo BA.
Rasterizace úseček s jiným sklonem
Pokud nám hodnota směrnice vyjde jedna, dostaneme úsečku se sklonem 45°. Ještě aby ne - pokud posuneme bod o jednu jednotku ve směru x, musíme ji posunout o jednu jednotku ve směru y. Co když nám směrnice vyjde větší než jedna? Mějme a=\frac{3}{1}
tedy posun o jednu jednotku ve směru x a o tři ve směru y. Pokud bychom použili pro vykreslení algoritmus uvedený výše, dostali bychom úsečku se spoustou děr. Pro první čtyři body by výpočet dopadl následovně
x | 0 | 1 | 2 | 3 |
y | 0 | 3 | 6 | 9 |
což by při vykreslení vypadalo takto

Protože musíme při vykreslení zajistit rasterizaci úsečky bod po bodu a tedy bez mezer, otočíme v tomto případě význam proměnných. O jednu jednotku budeme přidávat ve směru y a dopočítávat dle směrnice krok ve směru x. Nezapomeňte, že pokud přičítáme směrnici pro směr x, musíme použít její převrácenou hodnotu! Tedy \frac{1}{a}=\frac{1}{3}
Vypočítáme prvních deset bodů.
x | 0 | 0,3 (0) | 0,6 (1) | 0,9 (1) | 1,2 (1) | 1,5 (2) | 1,8 (2) | 2,1 (2) | 2,4 (2) | 2,7 (3) |
y | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Úsečka (část přímky) je na obrázku.

Při vykreslování úsečky algoritmem DDA je tedy nutné rozhodnout, který ze směrů bude pevně posouván o jedničku a který počítán.
Literatura a odkazy
KOLCUN, A. Základy počítačovej grafiky. Učební texty, Ostrava 2006.http://www.netgraphics.sk/dda-algorithm - applet
Žádné komentáře:
Okomentovat