Možná jsem měl matematiky málo (nebo moc), ale dost mě mate, že t je hodnota z intervalu a zároveň je to uzlový vektor... Navíc mě mate, že uzlový vektor je jednou indexovaný od 0 do s a podruhé do n+m+1. Znamená to, že s=n+m+1? Když ještě navíc řeknu, že t je uzlový vektor, tak je to uzlový vektor a basta fidli. Pokud je to napsaný na jedný stránce od jednoho autora, chtělo by to sjednotit zápis. (Jinak NURBS křivky vidím poprvý v životě.) Ale dost kritiky, už se těším na další pokračování :-)
Pro nurbs krivky je definovana delka uzloveho vektoru vzdy delky n+m+1 jako pocet ridicich bodu plus stupen plus jedna. U definice B-spline funkce je pouzito s, protoze se jedna o obecny vzorec a pokud provedete substituci s=n+m+1 dostanete jeho tvar pro nurbsy.
No je to tak, že parametr t v první rovnici se kryje s uzlovým vektorem. Jinými slovy - je to jiné t! To bez indexu je reálné číslo, to s indexem pak prvek uzlového vektoru. Obvykle se to značí stejně (u nebo t), i když já jsem byl vždycky proti :-) Pravda je ale taková, že ty dvě věci spolu korespondují
Viz C(t) - křivka je vlastně funkce o jednom parametru, parametr tedy musí být z nějakého intervalu. Například Bézierovy definujeme na <0,1>, u NURBS by to mělo být (tady si nejsem jist) <t_0, t_n_+_m_+_1>. Dost dobře nerozumím, co tam slečna má, se mi vůbec nezdá - už proto, že bázové funkce jsou na <t_n, t_n_+_k_+_1> nenulové a pro vykreslení celé křivky je nutno "aktivovat" všechny intervaly - tedy konvexní/konkávní "podkřivky" realizované danými bázovými funkcemi.
Uzlový vektor může být libovolný interval, např. (0,0,1,2,3,3), samozřejmě se nejčastěji používá interval(0,1), tedy uzlový vektor ekvivalentní k předcházejícímu je (0,0,0.333,0.666,1,1). V programu stačí přidat transformační metodu. Při vykreslování křivky se aktivují všechny bázové funkce. Kouzlo je v tom, že existuje deBoorův algoritmus, který celý výpočet zjednodušuje, ale o tom se dozvíte v příštím díle :-)
Kolega měl ale na mysli fakt, že t náleží intervalu <t(n), t(n+1)>. Podle mě to je nepřesně, tedy pokud to bylo zamýšleno jako definiční obor celé křivky. Na to se tedy ptám - jaký tedy je?
Také nerozumím tomu, že se aktivují všechny bázové funkce. Jejich výsledek je nenulový jen na jednom určitém subintervalu, právě proto jsou modifikace na křivce lokální. Kdyby se aktivovaly (byly nenulové) všechny najednou, tak by tomu tak nebylo.
Definicni obor je interval <t(n), t(m+1)>.
Pro pevnou hodnotu t se použijí vzdy jen určité z nich, podle toho, v jake subintervalu uzlového vektoru leží. To je lokálnost. Pokud vykreslujete celou křivku, aktivují se tedy postupně všechny.
Takže v případě toho příkladu je to <0, 1>. Krajní prvky vektorů se obvykle znásobí, aby křivka začínala a končila a kontrolním bodu. Vše je objasněno :-)