Kružnica a elipsa sú základné grafické výstupné prvky.
Kružnicu so stredom v bode [xc,
yc] a polomerom r
môžeme vyjadriť
Osovú elipsu (osi sú rovnobežné so súradnicovými osami) so stredom v bode [xc, xc] vyjadrujeme
parametricky:
x = xc + a * cos(alfa)
y = yc + b * sin(alfa),
pre alfa ∈ <0, 2p>
a a,b sú hlavná a vedľajšia poloos.
implicitne:
(x - xc)2
(y - yc)2
------------ + ------------ -1 = 0.
a2
b2
Vieme, že kružnica sa dá rozdeliť na 360 stupňov. Pri pohľade na kružnicu môžeme vidieť, že kružnica je symetrická vzhľadom na os x, os y a aj osi kvadrantov (funkcie x=y a x=-y). Pre kružnicu so stredom v začiatku súradnicovej sústave platí, že ak bod (x, y) je bodom kružnice, potom aj (y, x), (y, -x), (x, -y), (-x, -y), (-y, -x), (-y, x) a (-x, y) sú body kružnice. Preto nám na určenie všetkých bodov kružnice stačí vypočítať len 1/8 oblúka kružnice, tj. oblúk v rozsahu 0 až 45°. Bresenhamov algoritmus na rasterizáciu kružnice so stredom v bode S=(Stred_X, Stred_Y) počíta pozíciu bodov kružnice na tomto úseku. Každý vypočítaný pixel potom vykresľuje pre každý oktant rastrovej roviny :
PutPixel(Stred_X + X, Stred_Y + Y)
PutPixel(Stred_X + X, Stred_Y - Y)
PutPixel(Stred_X - X, Stred_Y + Y)
PutPixel(Stred_X - X, Stred_Y - Y)
PutPixel(Stred_X + Y, Stred_Y + X)
PutPixel(Stred_X + Y, Stred_Y - X)
PutPixel(Stred_X - Y, Stred_Y + X)
PutPixel(Stred_X - Y, Stred_Y - X).
Applet Zvoľ (myšou) jeden bod kružnice.
Applet : Kreslenie kružnice, 8 symetrických bodov
Hodnoty, ktoré pripočítavame (x a y,vid. zdrojový kód) sa neustále menia, a preto ich nemôžeme predvypočítať. Jediné urýchlenie algoritmu môžeme použiť pri násobení 4. Hodnotu (x-y) môžeme pri bitovom zápise "shiftovať" dvakrát doľava.
Applet Nakresli kružnicu s danou veľkosťou rastra
Iná metóda na zostrojenie kružnice je využitie transformácie otáčaním. Takto otáčaním jedného bodu okolo stredu kružnice vygenerujeme potrebný počet bodov a tie spojíme úsečkami.
Algoritmus transformácie otáčaním :
Applet Kreslenie kružnice metódou transformácie otáčaním, zvoľ bod kružnice
Pre urýchlenie je dobré predvypočítať si do tabuľky hodnotu sínus od 0 po 450 stupňov (pozn. 450=360+90) a cosínus(alfa) vyjadrovať ako sínus(alfa+90).
Applet Kreslenie kružnice, zvoľ bod kružnice
Pri pohľade na kružnicu, zobrazenú na grafickom zariadení, ktoré má vzdialenosti medzi riadkami pixlov iné ako medzi stĺpcami, vidíme, že zobrazovaná kružnica na obrazovke vyzerá ako elipsa. Tento jav môžeme použiť pri konštrukcii elipsy.
Konštrukcia osovej elipsy môžeme robiť pomocou Bresenhamovho algoritmu, podobne ako pri kružnici, pričom musíme vypočítať hodnoty v rozsahu jedného kvadrantu (elipsa je súmerná len podľa osí x a y).
Applet Elipsa so stredom v bode S[x,y] osami a a b
Ellipse select corner point for new ellipse. Author Marián Rojko
Source code