Křivky v počítačové grafice

Pro práci s křivkami v počítačové rafice potřebujeme aby měly tyto vlastnosti :

  • lokalita změn - změna polohy jednoho řídícího bodu křivky se projeví pouze na omezeném úseku křivky.
  • křivka nemusí procházet krajními body řídícího polygonu
  • afinní transformace celé křivky bude mít stejný výsledek jako transformace každého jejího bodu zvlášť
  • křivka leží v konvexní obálce řídícího polynomu

Polynomiální křivky

Vzniknou proložením řídících bodů polynomem obecně n-tého, v praxi však 3tího stupně. V případě že je třeba křivku o více než jedné vlnovce, řeší se to pak interpolací po částech, kdy výslednou křivku poskládáme s více polynomů třetího řádu. Podle toho zda křivka body prochází, nebo se jim jen blíží, můžeme rozdělit polynomiální křivky na:

  • Interpolační polynom - prochází zadanými body. Interpolační křivku vypočteme tak, že zadané body dosadíme do obecných rovnic polynomů, vznikne soustava rovnic, kterou vypočteme konstanty a z obecné rovnice máme konkrétní.

    I když se omezíme na polynom 3 stupně, může se výsledná funkce rozkmitat. To řeší Hermitův polynom, který kromě samotných řídících bodů udává i derivaci v tomto body (směrnici tečny).

  • Aproximační polynom - se přibližuje k daným bodům. Někdy totiž není možné body proložit funkcí, neboť body jsou nad sebou. V takovém případě chceme aby se funkce co nejvíc blížila daným bodům. K tomu se využívá metoda nejmenších čtverců 

Fergusonová křivka

Je dána svými body (P, P1) a tečnými vektory ( T0 , T1 ) v těchto bodech, jenž určují směr křivky. Rovnice Fergunovy křivky pak má tvar:


P(t) = P0F0(t) + P1F1(t) + T0F2(t) + T1F3(t)
,

kde F0, F1, F2, F3 jsou Hermitovské polynomy :

F0(t) = 2t3 − 3t2 + 1
F1(t) = − 2t3 + 3t2
F2(t) = t3 − 2t2 + t
F3(t) = t3 − t2

Navazováním Fergusnových kubik dostaneme kubickou spline křivku, která má parametrickou spojitost prvního řádu.

Spline křivky

Spline křivky jsou poskládáné polynomiální křivky se spojitosti do Cn, kde n je o jedno menší než stupeň polynomů (bo třeba u kubické křivky můžeme dosáhnout max. spojitosti C2, protože víc než 2x nemá cenu kubickou funkci derivovat).

Nejjednoduší spline křivkou je lomená čára.

Beziérová křivka

Beziérovu křivku vymysleli nezávisle na sobě dva francouzští konstruktéři aut. Beziér z Renaultu ji analiticky popsal v roce 1933 a o mnoho let později ji přes geometrickou konstrukci znovu objevil Casteljau matematik Citroenu. 

Beziérová je zadána řídícími body P. Křivka však prochází jen prvním a koncovým bodem a ostatní body tvoří lomenou čáru, která modeluje tvar křivky. V praxi se používá hlavně Beziérová kubika zadána čtyřmi body  P0 -P4 a při více řídících bodech se počítá po častech. Rovnice Bezierovy kubiky má tvar:

P(t) = P0B03(t) + P1B13(t) + P2B23(t) + P3B33(t),

kde bázové funkce B- B4 Bernsteinovy polynomy třetího stupně:

Obecná rovnice Beziérovy křivky

P(t) = P0B0n(t) + P1B1n(t) + ... +PnBnn(t)

Bernsteinovy polynomy se spočtou dle vzorce:

B03(t) = 1 − t2

B13(t) = 3t (1 − t2)

B23(t) = 3t2 (1 − t2

B33(t) = t3 (1 − t2)

Konstrukce Bezierovy křivky

Pro geometrickou konstrukci Beziérovy křivky zvolíme poměr t v kterém dělíme lomenou řídící čáru, jak je vidět na obrázku vpravo, kde je t=0,5

Takto jsme vykreslili první bod křivky P10. Konstrukcí bodu P10 jsme získali nové řídící body, které použijeme pro získání dalších bodů křivky. Další dva body křivky tedy získáme stejným způsobem za použití řídících bodů {P0, P5, P8, P10} a {P10, P9, P7, P4}. Tímto rekurzivním způsobem postupně vykreslíme celou křivku.

Výhoda této konstrukce je, že můžeme ovlivnit hustotu vykreslování dle potřeby. Například v oblasti velkého zakřivení.

Animace beziérovy křivky

Coonsová B-spline křivka


Coonsnova kubika zadána čtyřmi řídícími body 

Coonsnová kubická B-spline křivka vznikne pospojováním Connsnových kubik, tak aby byla zajištěna spojitost druhého řádu.

Coonsnová kubika je parametrická křivka dána čtyřmi body P0, P1, P2, P3 a tímto vztahem:

P(t) = 1/6( P0C0(t) + P1C1(t) + P2C2(t) + P3C3(t) ),

kde bázové funkce jsou:

C0(t) −t3 + 3t2 − 3t + 1
C1(t) = 3t3 − 6t2 + 4
C2(t) = −3t3 + 3t2 + 3t + 1 
C3(t) = t3

B-spline křivky