Kao što su se impulsi koristili za modeliranje sudara i kontakata na sličan način možemo odrediti impulse za modeliranje zglobova tj. za određivanje ograničenja pozicije i orijentacije. Postoje dvije osnovne vrste zglobova: translacijski i rotacijski zglobovi.

Translacijski zglobovi

  Translacijski zglobovi brišu translacijske stupnjeve slobode, to znači da se tijela neće moći translatirati u određenim smjerovima ali će se moći rotirati u svim smjerovima.

  Slika 21. Stupnjevi slobode translacijskih zglobova

Translacijski zglob s ograničena tri stupnja slobode

  Najjednostavniji primjer zgloba je sferni zglob koji se vidi na slici 21a. Zglob spaja jednu točku tijela A s jednom točkom tijela B tako da se tijela jedino mogu rotirati oko zajedničke spojne točke. Ovaj zglob briše sva tri translacijska stupnja slobode. Naravno da se tijela mogu translatirati u globalnom sustavu, međutim u odnosu jedan na prema drugom tijela se ne mogu translatirati.

  Slika 22. Sferni zglob

Ako bi se tijela simulirala bez uzimanja u obzir ograničenja, tijela će se razdvojiti kao na slici 22. Potrebno je pronaći impuls na početku simulacijskog koraka kojim će se eliminirati udaljenost koja nastaje na kraju simulacijskog koraka (stabilizacija pozicije). Udaljenost na kraju vremenskog koraka jednaka je:

(9.1)

  gdje su:

  , pozicije tijela na kraju vremenskog koraka

  , orijentacije tijela na kraju vremenskog koraka

  , pozicije točke zgloba u lokalnim koordinatama tijela

Budući da točke na tijelu uglavnom imaju nelinearno gibanje odgovarajući impuls se može odrediti rješavanjem nelinearne jednadžbe iterativno kao u [12] no ovdje će se odrediti na pojednostavljen način kao u [13]. Ako je relativna brzina između dvije točke u simulacijskom koraku promijenjena za kao da je relativno gibanje između točaka linearno tada će izračunati impuls kojim se eliminira brzina smanjiti udaljenost no neće se potpuno eliminirati. Stoga je potrebno iterativno nekoliko puta izračunati impuls sve dok udaljenost ne nestane s određenom tolerancijom. U [13] su odredili da je za vremenski korak od 0.04s koji odgovara simulaciji od 25 sličica u sekundi dovoljno jedna do dvije iteracije da bi se eliminirala udaljenost s tolerancijom od 10-6m, osim u slučajevima gdje tijela imaju veliku brzinu. U primjerima napravljenim u ovom radu dovoljna je bila i jedna iteracija za uvjerljivu simulaciju. Prednost ovakvog pojednostavljenja je da je jednadžba za određivanje odgovarajućeg impulsa linearna pa je impuls lako za izračunati.

Iz (7.12) slijedi da za impuls kojim se eliminira brzina vrijedi:

(9.2)

Iz čega se slijedi da za impuls kojim se eliminira udaljenost na kraju vremenskog koraka vrijedi:

(9.3)

  gdje je:

   veličina vremenskog koraka

Nakon završetka simulacijskog koraka potrebno je još zadovoljiti ograničenja brzine (stabilizacija brzine). Relativna brzina točaka tijela koje odgovaraju zglobu mora biti jednaka nuli tako da je potrebno eliminirati brzinu na kraju simulacijskog koraka. Brzina na kraju simulacijskog koraka jednaka je:

(9.4)

  gdje su:

  , brzine tijela na kraju vremenskog koraka

  , kutne brzine tijela na kraju vremenskog koraka

  , pozicije točke zgloba u lokalnim koordinatama tijela

Impuls kojim se eliminira brzina određen je jednadžbom (9.2).

Translacijski zglob s ograničena dva stupnja slobode

  Druga vrsta translacijskog zgloba je zglob koji briše dva stupnja slobode i prikazan je na slici 21b. Zglob je određen točkama zgloba i u lokalnim koordinatama prvog i drugog tijela i vektora osi rotacije u lokalnim koordinatama prvog tijela. Točka može se slobodno gibati na liniji . Prije računanja impulsa točka trebala bi se pomaknuti po liniji određenoj s osi na poziciju gdje je najmanja udaljenost od točke . Prilikom implementacije točka se neće direktno pomicati po liniji nego će se impuls izračunati na drugi način. Impuls kojim se eliminira promjena brzine određen je jednadžbom (9.3). Impuls se izračuna projekcijom jednadžbe (9.3) u dvodimenzionalni prostor. Potrebno je odrediti linearno nezavisne vektore i okomite na vektor . Vektor izračuna se pomoću vektorskog produkta vektora i vektora jedne od osi koordinatnog sustava, na primjer . Problem je što vektorski produkt između dva paralelna vektora nije definiran pa ukoliko je kut između i približno jednak nuli vektor se izračuna kao vektorski produkt vektora i vektora neke druge osi npr. . Za uvjet kuta se uzima vrijednost približno jednaka nula a ne jednaka nuli zbog bolje preciznosti prilikom računanja okomitog vektora. Vektor jednak je vektorskom produktu vektora i . Izračunati vektori i odgovaraju stupnjevima slobode koje treba ograničiti. Slijedi da za jednadžbu pomoću koje se računa impuls vrijedi:

(9.5)

  gdje su:

   matrica projekcije

   projicirani impuls u dvije dimenzije

Impuls u tri dimenzije određen je sa:

(9.6)

Na isti način se odredi i impuls kojim se eliminira promjena brzine

(9.7)

Također je potrebno impuls pomoću izraza (9.6) transformirati u 3D prostor. 
 

Translacijski zglob s ograničenim jednim stupnjem slobode

  Ovaj translacijski zglob briše samo jedan stupanj slobode i prikazan je na slici 21c. Zglob je određen točkama zgloba i u lokalnim koordinatama prvog i drugog tijela i vektora osi rotacije i u lokalnim koordinatama prvog tijela. Točka može se slobodno gibati na ravnini . Potrebno je prije računanja impulsa pomaknuti točku po ravnini na poziciju gdje je najmanje udaljena od točke . Dakle, impuls će se izračunati projekcijom jednadžbi (9.2) i (9.3) u jednodimenzionalni prostor. Matrica projekcije jednaka je a impulsi kojima se eliminira promjena udaljenosti i brzine računaju se rješavanjem jednadžbi na isti način kao i u prethodnom poglavlju. I zglob sa sva tri ograničena stupnja slobode bi se također mogao riješiti na isti način s time da se za matricu projekcije uzme jedinična matrica.

Rotacijski zglobovi

  Rotacijski zglobovi brišu jedan do tri rotacijska stupnja slobode. Za razliku od prijašnjih impulsa ovdje će biti potrebno izračunati kutni impuls . Kutni impuls mijenja samo kutnu brzinu. Iz (7.18) se može vidjeti da promjena kutne brzine pod utjecajem kutnog impulsa iznosi:

(9.8)

Sada se može izračunati kutni impuls iz relativne promjene brzine:

(9.9)

  gdje je:

   

  Slika 23. Stupnjevi slobode rotacijskih zglobova

Rotacijski zglob s ograničena tri stupnja slobode

  Za zglob koji briše sva tri rotacijska stupnja slobode vrijedi da se mogu translatirati u svim smjerovima ali se ne mogu rotirati relativno u donosu jedan na prema drugom, prikazan je na slici 23a. Slično kao što je kod translacijskog zgloba bilo potrebno eliminirati udaljenost na kraju simulacijskog koraka tako je ovdje potrebno eliminirati rotaciju koja nastaje na kraju simulacijskog koraka. Promjena u relativnoj orijentaciji između tijela na kraju simulacijskog koraka jednaka je:

(9.10)

  gdje su:

  , orijentacije tijela na početku simulacijskog koraka

  , orijentacije tijela na kraju simulacijskog koraka

Kvaternion potrebno je pretvoriti u os rotacije i kut rotacije . Rotacija koju je potrebno eliminirati jednaka je . Iz (9.9) slijedi da za kutni impuls kojim se eliminira rotacija vrijedi:

(9.11)

Odgovarajući impuls se računa iterativno sve dok rotacija ne nestane s odgovarajućom tolerancijom. Na kraju simulacijskog koraka mora se eliminirati i razlika u relativnoj kutnoj brzini između tijela . Za impuls kojim se eliminira kutna brzina vrijedi:

(9.12)

Rotacijski zglob s ograničena dva stupnja slobode

  Rotacijski zglob koji briše dva rotacijska  slobode stupnja prikazan je na slici 23b. Tijela se mogu rotirati oko jedne zajedničke osi i translatirati u svim smjerovima. Zglob je određen s dvije osi i koje predstavljaju tu zajedničku os u lokalnim koordinatama tijela. Potrebno je odrediti linearno nezavisne vektore i okomite na vektor . Vektori se odrede na isti način kako je opisano u poglavlju o translacijskim zglobovima. Greška koja nastaje prilikom simulacije tj. razlika u orijentaciji na kraju simulacijskog koraka koju treba ispraviti jednaka je vektorskom produktu dviju rotacijskih osi u trenutku .

(9.13)

Odgovarajući impuls izračunat će se projekcijom jednadžbe (9.11) u ravninu određenu sa vektorima b i c. Dakle, vrijedi:

(9.14)

  gdje su:

   matrica projekcije

   projicirani impuls u dvije dimenzije

Za kutni impuls kojim se eliminira razlika u kutnim brzinama vrijedi:

(9.15)

Kutni impuls u tri dimenzije jednak je .

Rotacijski zglob s ograničenim jednim stupnjem slobode

  Rotacijski zglob s ograničenim samo jednim rotacijskim stupnjem slobode prikazan je na slici 23c. Tijela se mogu translatirati u svim smjerovima i rotirati oko dva linearno nezavisna vektora i . Zglob je određen s dva vektora i pri čemu se nalazi u lokalnom koordinatnom sustavu tijela prvog tijela dok se nalazi u lokalnom koordinatnom sustavu drugog tijela. Oba dva vektora su normalizirana. Zglob onemogućava rotiranje oko osi , to znači da kut između vektora i . mora biti jednak tokom cijele simulacije. Greška koja nastaje na kraju simulacijskog koraka tj. razlika u rotaciji koju treba eliminirati jednaka je:

(9.16)

Kutni impuls kojim se eliminira nastala greška računa se projekcijom jednadžbe (9.11) u jednodimenzionalni prostor. Matrica projekcije jednaka je . Razlika u kutnim brzinama eliminira se projekcijom jednadžbe (9.12) s istom matricom projekcije. Svi rotacijski zglobovi se mogu simulirati pomoću jednadžbi (9.11) i (9.12) s time da se za rotacijski zglob s ograničena tri stupnja slobode koristi jedinična matrica za matricu projekcije.

Hibridni model

  Prednost prethodne metode modeliranja zglobova je što se može jednostavno integrirati u simulaciju sa sudarima i kontaktima. Korak integracije je sada:

    • detekcija i rješavanje sudara i stabilizacija brzine
    • određivanje novih brzina i stabilizacija brzine
    • detekcija i rješavanje kontakata i stabilizacija pozicije
    • određivanje novih pozicija i stabilizacija brzine

  Budući da se prilikom rješavanja sudara i određivanja novih brzina pod utjecajem gravitacije mijenjaju brzine potrebno je izvršiti stabilizaciju brzine nakon tih koraka. Stabilizacija pozicije je povezana s rješavanjem kontakata. Nakon konstruiranja kontaktnog grafa rješavaju se kontakti jedan po jedan od najniže prema najvišoj razini. Nakon rješavanja svih kontakata između tijela na određenoj razini s tijelima na nižoj razini rješavaju se ograničenja (zglobovi) između tijela na toj razini i tijela na nižoj razini. Također se izvodi i propagiranje šoka na isti način. Na kraju se odrede nove pozicije i orijentacije i ponovo se izvede stabilizacija brzine. Razlog zbog kojeg se stabilizacija pozicije vrši unaprijed je zbog toga jer ako bi se stabilizacije izvela nakon određivanja novih pozicija došlo bi do preklapanja objekata. Na sljedećoj slici se vidi slučaj kada se ne koristi stabilizacija unaprijed. Tijela na slici lijevo bi došla u konfiguraciju prikazanu desno i tada bi se pokušalo spojiti točke zgloba, što je nemoguće bez preklapanja tijela. Korištenjem stabilizacije unaprijed onemogućuje se uopće dolazak u desnu konfiguraciju [12].

  Slika 24. Stabilizacija unaprijed