Geometrie/Rasterizace
Rasterizace
[editovat | editovat zdroj]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.
Popis algoritmů
[editovat | editovat zdroj]DDA algoritmus
[editovat | editovat zdroj]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:
Bresenhamův algoritmus pro úsečku
[editovat | editovat zdroj]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
Kresba kružnice pomocí otáčení bodu
[editovat | editovat zdroj]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.
Bresenhamův algoritmus pro kružnici
[editovat | editovat zdroj]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 - 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
Kód v jazyce C#
[editovat | editovat zdroj]Příklad řešení v jazyce C#.
Autoři
[editovat | editovat zdroj]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.