Neuniformní racionální B-Splajn (NURBS)

Zadání:

V interakčním prostředí realizujte algoritmus pro kresbu Neuniformních racionálních B-Splajnů (NURBS). Součástí řešení je znázornění konstrukce křivky, přidávání a ubírání řídících bodů a změna váhového vektoru. Realizujte program pro zadání a kresbu křivek.

 

Teorie NURBS:

Neuniformní racionální B-Splajn křivky (NURBS – non uniform rational B-spline) jsou zobecněním         B-splajn  křivek ve smyslu definice uzlového vektoru.


Křivka NURBS je určena:

                       

Kde:      

 

             jsou řídící body, které určují výsledný tvar křivky

 

             jsou tzv. váhové parametry, wi > 0

 

       jsou  normalizované B-splajn bázové funkce stupně k

 

        jsou racionální bázové funkce

 

 

                Racionální bázová funkce je určena:

 

 

                                              

 

 

 

Křivka NURBS je určena n + 1 body řídicího polynomu, uzlovým vektorem U délky m + 1 a stupněm

křivky k. Uzlový vektor pro křivku NURBS procházející prvním a posledním bodem řídicího polynomu má tvar :

U = {0, 0, . . . 0, tk+1, . . . tm-k-1, b , b , . . . , b }.

Pro tento vektor platí:         ti £ ti+1

jestliže ti+1 – ti   ¹ konstanta, pro "t  pak se jedná o neuniformní parametrizaci (toto je     

hlavní výhoda NURBS)

                                               délka vektoru je určena m=k + n + 1

 

Nad uzlovým vektorem jsou definovány normalizované bázové funkce stupně k, pro které platí:

                Nezáporná hodnota pro všechny hodnoty i,n,u

 

                Jednotkový součet

               


                Rekurentní vztah:

 kde pro tÎ<ti, ,ti+1>

  jinak

 

 


Implementace NURBS:

                Pro použití v programu byla navržena třída NURBS, která obsahuje metody pro výpočet bodů na křivce. Pro reprezentaci hodnot řídících bodů, váhového a uzlového vektoru jsou zvoleny kontejnery typu vektor. Třída

obsahuje také základní metody pro manipulaci s nimi Nad touto třídou definována třída Křivka. V této třídě jsou implementovány metody pro grafickou reprezentaci křivky a jejích součástí (řídící body, kostra).

                Program byl napsán v prostředí C++ Builder 3.0 s využitím VCL knihovny. Prostředí programu je vytvořeno pomocí komponent z této knihovny. Obsluha zpráv jednotlivých komponent je zajištěna pomocí metod

již výše zmiňovaných tříd.

                Pro rychlé překreslování při manipulaci s křivkou bylo využito binární funkce xor. Z tohoto důvodu se dva

body o stejných souřadnicích nezobrazí. Tento jev je však řídký a není důvodu jej ošetřovat.

                Uzlový vektor je tvořen programem. Pouze u kružnice je předefinován.

 

Práce s programem:

                Pro práci s programem je nutné aby existovaly minimálně tři řídící body. Pro jednoduchost je takovýto primitiv již obsažen při volbě nové křivky. Jako další primitiv byla zvolena kružnice, která demonstruje sílu využití

NURBS křivek. Řídící body lze ubírat, přidávat  a libovolně s nimi manipulovat za stálého přehledu o aktuálním tvaru křivky. Volně lze nastavovat také stupeň polynomu křivky a váhový vektor.

                Program lze obsluhovat pomocí menu a klávesových zkratek. Názvy jsou voleny výstižně pro intuitivní obsluhu programu.

               

Závěr:

                Program byl navržen tak, aby vhodným způsobem umožňoval editaci NURBS křivek a změnu jejich parametrů. Pomocí tohoto programu si lze vyzkoušet základní vlastnosti a možnosti NURBS křivek.