Kružnica a elipsa

    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ť 

  • analyticky : r2 = (x-xc)2 + (y-yc)2,
  • implicitne : (x-xc)2+ (y-yc) 2-r2 = 0.
  • parametricky :
      x = xc + r * cos(alfa)
      y = yc + r * sin(alfa),
    pre alfa∈ <0, 2p>.

  • 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

    Rastrový rozklad kružnice

    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

    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

    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

    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

    Applet Kreslenie kružnice, zvoľ bod kružnice


    Rastrový rozklad elipsy

        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

    Applet Elipsa so stredom v bode S[x,y] osami a a b

    $$$APPLET

    Ellipse select corner point for new ellipse. Author Marián Rojko

    Source code
    Copyright (c) 1999-2017 Juraj Štugel. www.netgraphics.sk