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.
Kde: 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
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.

Křivka NURBS je určena:
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
![]()
![]()

Rekurentní vztah:
kde pro tÎ<ti, ,ti+1>
jinak
Implementace NURBS: