Vektor čvorova (eng. Knot vector) je lista u kojoj su navedeni svi čvorovi neke krive slobodnog oblika, odnosno splajn krive (B-Splajn krive, NURBS krive...).


Čvorovi su u listi navedeni u vidu parametara, t.j. brojčanih vrednosti koje određuju njihove pozicije na krivi. Na osnovu unetih tačaka mišem od strane korisnika i vektora čvorova algoritmi jezgra za geometrijsko modeliranje CAD softvera proračunavaju (aproksimacijom ili onterpolacijom) i iscrtavaju krivu.

CAD softveri mogu na različite načine sastavljati vektor čvorova tako da ću se truditi da u ovom tekstu izložim samo neophodnu logiku.

Da bi mogao objasniti kako se pravi vektor čvorova prvo je potrebno objasniti šta je to mnogostrukost čvora.

 

Mnogostrukost

Mnogostrukost čvora nastaje kada više čvorova leže u istoj tački krive, t.j. kada je više čvorova podudarno u nekoj tački krive. Čvorovi koji imaju mnogostrukost veću od 1 se u vektor čvorova upisuju kao niz istih brojeva. Kolika je mnogostrukost toliko puta se broj upiše u niz.

Mnogostrukost nam daje informaciju o kontinuitetu krive u čvoru. Kada je u nekoj tački krive podudarno onoliko čvorova koliko je stepen krive (red - 1), u tački postoji prelom (špic, vrh) t.j. G0 kontinuitet.  U praksi to znači da segment krive sa jedne strane čvora ne utiče na drugu stranu, t.j. brisanje jedne strane neće izazvati nikakve promene na drugoj strani. Mnogostrukost čvora je ograničena stepenom krive jer bi veća mnogostrukost podelila krivu na odvojene delove.

Povećanje mnogostrukosti čvora za jedan, smanjuje kontinuite krive u čvoru za jedan. Na primer, kriva sa stepenom 3 ima u čvorovima G2 kontinuitet. Ako na ovoj krivi napravite čvor koji ima mnogostrukost 2 (dva čvora jedan iznad drugog), kontinuitet u njemu će biti G1, a ako napravite čvor koji ima mnogostrukost 3, u njemu će biti G0 kontinuitet t.j. prelom (špic). Dalje mnogostrukost ne možete povećavati pošto ćete razdvojiti krivu na dva dela.

U nekim softverima na mnogostrukost možete uticati klikom više puta na istu tačku prilikom crtanja krive. U nekim softverima (kao npr. FreeCAD) postoje alatke koje mogu direktno smanjiti ili povećati mnogostrukost nekog čvora.

 

Vektor čvora

Splajn krive se sastoje od raspona (više segmenata) i svaki od njih je opisan posebnom polinomskom jednačinom. Broj polinoma potrebnih za opis cele krive zavisi od broja kontrolnih tačaka i stepena, a jednak je njihovoj razlici (Broj kontrolnih tačaka - Stepen). Čvorovi su tačke u kojima se rasponi spajaju. 

Vektor čvorova je lista čvorova koja određuje početak krive, završetak krive i mesta gde se pojedini rasponi spajaju. Drugim rečima vektor čvorova određuje mesta na krivi gde polinomi počinju i završavaju.

Splajn krive (B-splajn, NURBS…) su parametarske krive, što znači da se predstavljaju pomoću polinomskih funkcija f(u) u parametarskom obliku. Svakoj tački na krivi odgovara neka vrednost parametra u, početna tačka ima vrednost parametra umin, zadnja tačka ima vrednost parametra umax , a svim ostalim tačkama je položaj na krivi određen vrednostima parametra između umin i umax. Pošto se čvorovi nalaze na krivi, naravno da i oni njima odgovara neki parametar unutar opsega  umin i umax.

Vektor čvora je u stvari lista svih čvorova, t.j. brojčane vrednosti parametra svakog čvora. On deli ukupni parametarski prostor krive na segmente t.j. raspone.

Možemo ga posmatrati i kao niz vrednosti parametara koji određuju gde i kako kontrolne tačke utiču na splajn krivu. Ukupni broj čvorova (uračunata mnogostrukost) je uvek jednak zbiru broja kontrolnih tačaka (BKT), stepena krive (SK) i broja 1 (BČ = BKT + SK +1), s tim da zbir (SK + 1) možemo posmatrati i kao red krive.

Napomena: Oko ukupnog broja čvorova postoji u tekstovima i softverima mala nedoumica jer se ukupni broj čvorova (jednostruki i mnogostruki) ponekad računa po formuli BČ = BKT + SK +1, a ponekad po formuli  BČ = BKT + SK - 1. Ova neslaganje se tiču programera i matematičara. Neki softveri su tako napravljeni da se prilikom proračunavanja krive dva čvora (jedan na početku i jedan na kraju) proglase za "lažne" čvorove (fake knots) i u tom slučaju važi formula  BČ = BKT + SK - 1.
      
Mnogostruki čvorovi imaju istu vrednost parametra i u vektor čvorova se upisuju kao niz istih brojeva, odnosno u vektor čvorova se upiše vrednost parametra onoliko puta koliko iznosi mnogostrukost. Ako kriva ima stepen 3, njeni prvi i zadnji čvorovi imaju mnogostrukost 4, tako da će se u vektor čvora upisati kao niz od 4 iste vrednosti. Na ovaj način se u stvari definiše da su rasponi rasponi između mnogostrukih  čvorova nulte dužine. Ovo ima veze sa polinomskim jednačinama i bitno je za matematičare i programere. Za korisnike CAD programa je bitno upamtiti da se pomoću mnogostrukosti utiče na kontinuitet krive (na njene više izvode).


Vektor čvorova splajn krive

Ako je kriva otvorena, vektor čvora počinje i završava se čvorovima čija je mnogostrukost jednaka redu krive (Stepen + 1). Krive sa takvim vektorima čvorova počinju i završavaju se u kontrolnoj tački. Ovo je logično jer u tačkama na krajevima je prekid, a to je kontinuitet G-1.

Neki softveri mnogostrukost upisuju u vektor čvorova, a neki je upisuju u posebnu listu. Vektor čvora sastavljen u prvoj grupi softvera izgleda ovako (0, 0, 0, 1, 2, 3, 4, 4, 4), a u drugoj grupi izgledao ovako (0, 1, 2, 3, 4), s tim da bi mnogostrukost bila zabeležena na neki drugi način u nekoj drugoj listi. Kako će neki softver prikazivati vektor čvorova zavisi od programera koji programiraju geometrijsko jezgro za modeliranje.

 

Pravila za sastavljanje vektora čvorova

Prilikom sastavljanja vektora čvorova softveri poštuju nekoliko pravila:

  • broj kontrolnih tačaka koje definišu krivu mora uvek biti jednak ili veći od reda krive,

  • broj čvorova u vektoru čvorova je jednak zbiru (broj kontrolnih tačaka + stepen + 1), kod sofvera koji ne upisuju "lažne čvorove" zbiru (broj kontrolnih tačaka + stepen - 1),

  • red krive mora biti najmanje dva,

  • vrednosti u vektoru čvorova moraju uvek biti u rastućem redosledu. Npr., [0 0 0 1 2 3 4 4 4] je validan vektor čvorova, ali [0 0 0 2 1  4 4 4] nije,

  • važni su samo odnosi razlika između vrednosti parametara čvorova, što u praksi znači da se pomoću vektora čvorova (0, 0, 0, 1, 2, 3, 4, 4, 4), (0, 0, 0, 2, 4, 6, 8, 8, 8) i (100, 100, 100, 200, 300, 400, 500, 500, 500) konstruiše ista kriva,

  • vrednosti parametara mogu da budu negativni (npr. kod zatvorene krive raspon koji se preklapa).

 

Promenom vrednosti u vektoru čvorova direktno se može uticati na izgled krive.

Vektori čvorova se koriste u unutrašnjim proračunima koje vrši jezgro za geometrijsko modeliranje, i oni nisu od velike koristi za korisnike CAD softvera. Zbog toga u velikom broju CAD softvera, vektor čvorova nije moguće ni videti. U nekim softverima je moguće videti vektor čvorova i u zavisnosti od softvera možete mu pristupiti na različite načine. Na primer, u površinskom modelaru Rhinoceros možete ga videti pomoću komande List. U Rhinocerosu se sa vektorom čvorova može veoma kavlitetno manipulisati u dodatku Grasshopper (Grasshopper plug-in). U softveru FreeCAD nije moguće videti vektor čvorova, ali se mnogostrukost može prikazivati i menjati za svaki čvor. Postoje softveri u kojima možete čak i uređivati krivu pomoću vektora čvorova, naravno mnogo je lakše uređivati krivu alatkama (npr. umetni/obriši čvor, povećaj stepen i sl.) nego pomoću vektor čvorova.

Čvorovi koji imaju mnogostrukost, a nalaze se u sredini vektora čvorova čine krivu manje glatkom u tom čvoru npr: (0, 0, 0, 1, 2, 2, 3, 4, 4, 4). Krajnji slučaj je kada se u sredini liste nalazi čvor koji ima mnogostrukost jednaku stepenu, u tom čvoru kriva ima prelom.

Crtati splajn krive je moguće i bez razumevanja pojma vektor čvorova, ali verujem da će svaki pravi ljubitelj 3D CAD modeliranja jedva čekati da pažjivo pročita ove redove :-)

Submitted by Čeh Jan on