Ušetřete

Hlavní navigace

Názory k článku
Křivky NURBS (2)

nerozumim
nerozumim (neregistrovaný)
10. 3. 2006 3:43 Nový

???

celé vlákno
Kdyz vychazim z predpokladu, ze clanek/serial mel neco prinest lidem kteri o tematu moc nevedi, tak myslim ze zacal trochu moc zhurta. Jestli je cilem autorky priblizit pocitacovou grafiku masam, mela zacit pozvolna a tak nejak "vtahnout ctenare do tematu". Ja, teorii pocitacove grafiky temer nepostizen, porad nevim proc by me mela zrovna tahle krivka zajimat. Zvlast kdyz nevim jak se modeluji nejake jine, zakladni tvary a objekty, jak to vykreslit a vubec.

Pokud ale chtela autorka jen probrat nejaky zvlastni matematicky aspekt cehosi tak mam pocit ze se trochu sekla se serverem kde praci publikuje. Vubec nechci rict, ze zde musi byt vsechny clanky jen pro zacatecniky, ale tohle je asi pro vetsinu ctenaru prilis odborne, uzce zamerene a nemajici zadny prakticky prinos.

Je to jako kdyby kurz chirurgie zacinal cvicenim "nejdriv panovi udelame bypass" a ne ukazkou jak drzet skalpel.
pht
pht (neregistrovaný)
10. 3. 2006 6:49 Nový

Re: ???

celé vlákno
ja, ac NURBS trochu rozumim, souhlasim, ze se v tom prase nevyzna. skoda, nebot jinak je to velmi hezke tema.
Pavel Tišnovský aura:98
10. 3. 2006 8:07 Nový

Re: ???

celé vlákno
ava
ava (neregistrovaný)
10. 3. 2006 8:17 Nový

Nevim nevim..

celé vlákno

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.

david
david (neregistrovaný)
10. 3. 2006 8:31 Nový

chyby v kodu

celé vlákno
Zda se mi ze ve fragmentech kodu jsou chyby:

4. pouziva se neexistujici operator in
6. 7. v cyklech je spatne ukoncovaci podminka, mysleno je zrejme napr. j < h + 1 misto j > h + 1
Jindřich Makovička aura:94
10. 3. 2006 12:53 Nový

Re: chyby v kodu

celé vlákno
in je zjevne klasicke "elementitko", ale taky nechapu, proc ho autorka neopsala pomoci nerovnosti, kdyz jinak vsechno kolem vypada jako C.
Culibrk
Culibrk (neregistrovaný)
10. 3. 2006 14:29 Nový

Re: chyby v kodu

celé vlákno
Treba proto, ze generovala C z nejakeho pseudo-basicu, ve kterem byvaji casto algoritmy uvadeny ve tretich zdrojich (knizkach). Mozna jsem se netrefil, kazdopadne je videt, ze tento kod nikdy jako C nebezel. Tim nechci snizovat kvalitu algoritmu, spise jeho interpretace v C.
Jana Procházková
Jana Procházková (neregistrovaný)
10. 3. 2006 14:54 Nový

Re: Nevim nevim..

celé vlákno
Funkcni program najdete na adrese prochazkovajana.ic.cz/files/nurbs2.c Redakce ho asi zapomnela pripojit. Po zadani parametru t se vraci bod na ctvrtkruznici o stredu [0,0,0] a polomeru 1. Staci pridat metodu na vykresleni. Body i vsechny parametry si muzete libovolne menit, jen musi splnovat vstupni podminky.

Pouziti v technicke praxi je napriklad takove:
-chcete delat oblouk mostu, prvni a posledni bod musite zadat na krivce
-pri navazovani nemuzou krajni body jen tak litat nekde uprostred krivky


Pro parametr t se vypocita bod krivky C(t), to je snad pochopitelne. Parametr t je z intervalu <0,1>, uzlovy vektor je posloupnost cisel take v intervalu <0,1> Pokud se t=t_i pro nejake i=0,1,..,n+m+1, tak se toto cislo v intervalu vyskytuje. Kolikrat je v tom uzlovem vektoru stejne cislo jako t, takove cislo se odecte od stupne krivky a vysledek je promenna h. A tolikrat probehne knot insertion.
Culibrk
Culibrk (neregistrovaný)
10. 3. 2006 15:12 Nový

Re: Nevim nevim..

celé vlákno
Diky.
z
z (neregistrovaný)
10. 3. 2006 9:18 Nový

Lomoná čára

celé vlákno
Stupeň křivky se zadává mezi 2 a horní hranicí - vhodně zvolené číslo (je možné i od jedné, potom kreslí lomenou čáru)...

No to asi nebude obecně platit, že :-) Přímka je taky křivka :-P
uživatel si přál zůstat v anonymitě
10. 3. 2006 14:16 Nový

Re: Lomoná čára

celé vlákno
samozřejemě se dá použít i rozmezí od jedné, ale většina softwaru, co znám, k vykreslení úsečky používá jinou jednoduchou metodu. Je zbytečné používat na ně NURBS, ale samozřejmě to jde.
Daniel Mašek
10. 3. 2006 12:22 Nový

peklo

Nejenze jsou zde chyby v ukoncovacich podminkach cyklu, ale jeste k tomu jsem se po dvou pokracovanich nic nedozvedel :-)
Pavel Píša
Pavel Píša (neregistrovaný)
10. 3. 2006 14:32 Nový

Lze interpolace NURBS polynomy konečného řádu?

celé vlákno
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 je iterativní 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?
Jana Procházková
Jana Procházková (neregistrovaný)
10. 3. 2006 15:09 Nový

Re: Lze interpolace NURBS polynomy konečného řádu?

celé vlákno
do robotiky nevidim, ale zaujalo me k robotice http://www.cs.kent.ac.uk/pubs/1999/825/content.ps
Jak jsem psala v jine reakci, zdrojak je na adrese prochazkovajana.ic.cz/files/nurbs2.c
Pavel Píša
Pavel Píša (neregistrovaný)
10. 3. 2006 17:42 Nový

Re: Lze interpolace NURBS polynomy konečného řádu?

celé vlákno
Děkuji za informace.
Článek vypadá velmi zajímavě.
Pavel Píša
Pavel Píša (neregistrovaný)
10. 3. 2006 14:47 Nový

Lze interpolovat NURBS polynomy konečného řádu?

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?

Zasílat nově přidané příspěvky e-mailem