Rasterizace
Z Wikiknih
Obsah |
[editovat] Rasterizace
Při zobrazení reálného modelu ve světových souřadnicích na výstupní zařízení (rastrové, vektorové) potřebujeme zajistit co nejvěrnější podobnost reálného a zobrazovaného modelu. Omezíme se v tomto textu na rastrové výstupní zařízení, jehož nejjednodušším grafickým prvkem je bod. Protože složitější objekty jsou jen skládankou jednodušších objektů, potřebujeme mít k dispozici algoritmy na výpočet polohy bodů jednoduchých objektů jako úsečky, kružnice, elipsy, oblouků, atd... Ukážeme si některé algoritmy pro výpočet bodů úsečky a kružnice.
[editovat] Popis algoritmů
[editovat] DDA algoritmus
Jedna se o přírustkový algoritmus. Jednoduchý algoritmus pro výpočet bodů úsečky. Ve směru jedné osy s větším přírůstkem inkrementuje o krok 1 a ve směru druhé osy o krok menší než 1 podle poměru délky úsečky ve směru x a ve směru y. Algoritmus je jednoduchý, ale relativně pomalý protože pracuje v oboru reálných čísel.
Označme
, potom
a) když
(osa s větším přírůstkem je X) zvolíme tedy
, dostáváme
.
Souřadnice dalšího bodu
vypočítáme:


b) když
nebo
(osa s větším přírustkem je Y) zvolíme tedy
, dostáváme
.
A souřadnice dalšího bodu
vypočítáme:


[editovat] Bresenhamův algoritmus pro úsečku
Mnohem rychlejší algoritmus pro generování bodů úsečky poskytuje tento algoritmus, používající pouze celočíselnou aritmetiku. Ve směru osy s větším přírustkem (nezávislé) inkremtentuje opět s krokem 1, ale ve směru druhé osy (závislé) vypočte chybový člen a podle něj určí bližší pixel k úsečce.
Předpokládejme že nezávislá souřadnice je souřadnice X, tedy
(v opačném případě by se postupovalo analogicky).
Označme 
Chybový člen 
Rekurzivní výpočet
. kroku (poslední vykreslený bod
), pro pozici dalšího bodu jsou dvě možnosti:
1)
- jako další bod zobrazíme bod
a chybový člen 
2)
- jako další bod zobrazíme bod
a chybový člen 
yxcyxcyxc
[editovat] Kresba kružnice pomocí otáčení bodu
Jednoduchá metoda pro výpočet bodů kružnice spočívá v tom, že vezmeme jeden bod ležící na kružnici (dána středem a poloměrem) a otáčíme jej o zadaný úhel proti směru hodinových ručiček. Body postupně spojujeme úsečkami (např. DDA). Je vidět, že kružnice je v tomto případě pouze aproximována nějakým pravidelným mnohoúhelníkem. Čím menší úhel, o který otáčíme, tím "věrnější" kružnici dostaneme.
Body na kružnici splňují v polárních souřadnicích rovnice
a 
Zvolíme libovolný bod na kružnici,
, další bod otočený o úhel
vypočteme rekurzivně:
,

Stačí zvolit krok
a postupně spojovat vypočítané body nějakým úsečkovým algoritmem.
[editovat] Bresenhamův algoritmus pro kružnici
Opět rychlejší algoritmus pracující podobně jako pro úsečku a jen v celočíselné aritmetice. Počítáme body pouze jednoho oktantu (zbylých 7 oktantů stačí vykreslit pomocí symetrie).
Algoritmus vypočte body na kružnici se středem v počátku a zadaným poloměrem pouze ve druhém oktantu. Body ostatních oktantů vykreslí symetricky a všechny posune o souřadnice středu kružnice.
Označme r - poloměr kružnice.
Chybový člen 
Rekurzivní výpočet
. kroku (poslední vykreslený bod
), pro pozici dalšího bodu jsou dvě možnosti:
1)
- jako další bod zobrazíme bod
a chybový člen 
2)
- jako další bod zobrazíme bod
a chybový člen 
[editovat] Kód v jazyce C#
Příklad řešení v jazyce C#.
[editovat] Autoři
Tento text vypracovali studenti Univerzity Palackého v Olomouci katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.