Chtěli byste mít doma nějaké "krásné křivky"? S následujícím návodem je získáte snadno. Na obrazovce vašeho počítače, samozřejmě...
To bohuzel asi ne. Libi se mi pristup Pavla Tisnovskeho ktery pise priklady v clancich tak, ze se vysledky skutecne na obrazovce objevi. Zdrojaky uvedene zde mi bohuzel nic nevykresli :-(
Pro snazší pochopení je všude brán uzlový vektor, jehož prvních degree+1 složek jsou nuly a posledních degree+1 složek jsou jedničky. Proto se parametr t pohybuje v intervalu 0 .. 1, křivka začíná v prvním řídícím bodě a končí v posledním řídícím bodě, což je pro technickou praxi důležité
Bohuzel i pres to ze je to pro snazsi pochopeni, jsem nepochopil proc pri volbe tohoto uzloveho vektoru se parametr t pohybuje v 0 .. 1, proc krivka zacina a konci ve zminovanych bodech a proc je to v technicke praxi dulezite. Ale verim ze kdybych se dukladne ponoril do vzorcu z minuleho dile a precetl si nejakou literaturu o nurbs krivkach v technicke praxi tak to pochopim, beru to jako svou chybu.
Celý algoritmus je založen na opakování metody nazvané knot insertion = vkládání uzlu
pekna veta, autorka rozhodne neni grafomanka :-)
Celý algoritmus je založen na opakování metody nazvané knot insertion = vkládání uzlu. Počet těchto opakování je v programu určen proměnnou h. Pokud se parametr t v uzlovém vektoru nevyskytuje, je h rovno stupni křivky. Pokud se parametr t vyskytuje v uzlovém vektoru (t0, t1, ... tn+m+1), opakování knot insertion se o tuto hodnotu sníží. Celý tento postup se nazývá deBoorův, někdy též Cox-deBoorův algoritmus.
Opet nerozumim :-( volim si h a podle jeho hodnoty mi vyjde pocet opakovani nebo naopak? kde se vezme v uzlovem vektoru parametr t a v jakem tvaru? Co znamena "opakovani knot insertion se o tuto hodnotu snizi"? o jakou hodnotu? jak se vubec muze snizit "opakovani"?
Jelikož je b-spline funkce stupně nula rovna jedné, jsou prvními výsledky kroku nula samotné řídící body.
Tomu mi asi nezbyde nez verit.
Pro parametr t se spočítají hodnoty alfa, což je výraz před bázovými polynomy v definici b-spline funkce. Termin bazovy polynom se v serii objevuje poprve.
Následně se provede výpočet s hodnotou vypočtenou v předchozím kroku a s příslušnou hodnotou alfa. Celý výpočet se opakuje h-krát.
Jaky vypocet?
.......samotny zdrojak jiz rozebirat nebudu, ale jak rikam, kdyby se dal opravdu spustit a nebyly to jen komentovane fragmenty kodu, libilo by se mi to podstatne vic.
Grafikou se nezabyvam, takze toho ze jsem NURBS z clanku nepochopil prilis nelituji. Myslim si ale ze pro lidi co se grafikou zabyvaji existuji schudnejsi cesty jak NURBS vstrebat nez je cteni teto serie.
Nepovedlo se mi formátování, proto posílám příspěvek znovu.
Nejsem matematik ani počítačový grafik. V současné době mě však zajímají spojité křivky z pohledu řízení robotů a obráběcích strojů.
Protože si myslím, že seriál nezačal příliš šťastně, pokusím rekapitulovat, co jsem pochopil.
NURBS není vlastně nic jiného, než vážený průměr bodů řízený přes funkce b_x(t) jedním (v ploše dvěma) parametry. Funkce b_x(t) odpovídají postupně podle řádu delta funkci, rampám ve tvaru trojúhelníku, úekům parabol prvního a vyšších řádů. Je to stejné jako ve statistice a stejně jako u zákona o velkých číslech tedy musí platit, že b_+inf(t) bude Gaussova funkce. To zároveň osvětluje, proč se člověku zdají tyto křivky přirozené a jimi popsané oběkty připomínají člověku známé tvary z přírody.
Na rozdíl od klasických rozdělení však NURBS křivky pracují nad neuniformě rozdělenými přírůstky parametru (osy x pro rozdělení) a tím umožňují specifikovat i složitější tvary s různě ostrými hranami.
K pochopení mi pomohly především informace z práce Lubomíra Alexandra a článků Pavela Tišnovského.
Zároveň i na pravděpodobné autorčině domovské stránce se nachází množství užitečných informací http://prochazkovajana.ic.cz/ Je škoda, že odkazy na tyto informace k článku nepřidala. Též se mi nelíbí, že nebyl přiložen celý kód popisované funkce, protože při jeho napsání a otestování by autorka mohla eliminovat chyby a zvláštnosti, které silně stěžují pochopení.
Nyní můj dotaz. Existuje nějaký výpočetně schůdný způsob, jak po úsecích převést NURBS křivku na polinomiální úseky konečného řádu? Předvedený výpočet vyžaduje několik iterací a jeho náročnost třeba pro řízení robota v reálném čase se mi zdá vysoká. Můj první odhad z definice funkce C(t) mi vychází, že je určitě možné funkci pro jednu souřadnici mezi každými dvěma uzly převést na podíl dvou polynomů řádu n, kde n bude lineárně růst se stupněm (spojitosti/hladkosti) NURBS křivky. Bylo by možné se nějak zbavit požadavku na ten podíl? Není nějak zaručeno, že by se sumy ve jmenovateli daly vypočítat dopředu pro celé úseky? Jsou-li váhy shodné, tak je to myslím zaručené. Nejsou-li shodné, tak se mi to zdá problematické. Zabýval se již někdo tímto problémem?