Testiranje je li došlo do sudara između dva tijela određuje se na način da se za svaki vrh testira je li unutar ili izvan tijela. Na taj način se neće detektirati svi sudari poput sudara između dva brida kada se vrhovi brida nalaze izvan tijela s kojim se traži sudar. Kada se tijelo sastoji od velikog broja trokuta greška zbog zanemarenih sudara između bridova biti će mala, no ukoliko se traži sudar za tijelo s malim brojem trokuta greška će biti prevelika da bi zanemarili sudare između bridova. Na primjer, za detekciju sudara između dvije kocke koje imaju samo 12 trokuta greška je prevelika pa je potrebno detektirati sudare između bridova. Sudari između bridova se detektiraju na način da se na svaki brid doda određeni broj točaka, ovisno o tome koliko preciznu simulaciju želimo (za sudar između dvije kocke iste veličine dovoljno je dodati dva do tri vrha). Za svaku točku na bridu vrši se detekcija sudara i od svih tih točaka za točku sudara se uzima samo ona točka koja se nalazi najdublje unutar drugog tijela.

  Slika 6. Sudar između dva brida

Određivanje predznaka

  Nalazi li se točka unutar konkavnog tijela ili izvan njega može se odrediti na mnogo načina. Jedan od jednostavnijih načina je bacanjem zrake iz točke i određivanja sjecišta zrake s mrežom poligona. Ukoliko je zraka presjekla mrežu neparan broj puta točka je unutar tijela. Problem kod bacanja zrake je kada zraka siječe više trokuta u istoj točci (kada siječe bridove ili vrhove) pa je potrebno ta sjecišta brojati kao jedno. Zbog toga će se u ovom radu za određivanje predznaka koristiti metoda predstavljena u [3].

  Prvo je potrebno odrediti točku na površini tijela x koja je najbliža točki p za koju želimo odrediti predznak. Normala nu točki x jednaka je normali poligona kojem pripada (osim za točke na bridovima i vrhovima). Sada je jednostavno za odrediti je li točka unutar ili izvan tijela a to je skalarnim produktom normale n i vektora r=p-x. Ukoliko je produkt pozitivan točka je izvan tijela a inače je u tijelu. Međutim za bridove i vrhove normala nije definirana te se lako može pokazati da postoje slučajevi kod kojih je skalarni produkt s nekim normalama poligona koji se sjeku u vrhu pozitivan dok je s drugim negativan. Primjer takvog slučaja vidi se na slici 7.

Slika 7. Skalarni umnožak r=p-x s jednom normalom daje pozitivan rezultat a s drugom negativan.

  Potrebno je odrediti normalu kod koje će skalarni produkt dati ispravan rezultat. Takva normala nazvat će se pseudo normala. Pseudo normala bi se mogla izračunati kao srednja vrijednost svih normala poligona u vrhu, kao kod računanja normale prilikom Gouraud-ovog sjenčanja, no i tada se mogu pronaći slučajevi kod kojih skalarni produkt ne daje ispravan rezultat. Ispravna normala odredit će se zbrojem svih normala poligona pri čemu će težina svake normale ovisiti o veličini kuta pod kojim određeni poligon sudjeluje u vrhu. Tako za normalu na bridu između dva poligona i i j vrijedi:

(3.1)

Dok za normalu u vrhu vrijedi:

(3.2)

  Za trokut određen vrhovima , , koji vrhom sudjeluje u određivanju normale težina normale jednaka je kutu između vektora i .

(3.3)

  Prilikom određivanja udaljenosti točke od tijela potrebno je odrediti udaljenost točke od svakog trokuta, udaljenost od tijela jednaka je najmanjoj od svih tih udaljenosti. Osim udaljenosti potrebno je odrediti i točku na trokutu koja je najbliža za traženu točku te normalu. Da bi se to odredilo potrebno je pronaći regiju u koju se projicira tražena točka a to će se sve odrediti prilikom određivanja udaljenosti točke od trokuta (Slika 8.).

  Slika 8. Sedam različitih Voronoi-evih regija ravnine u kojoj se nalazi trokut

Udaljenost točke od trokuta

  Udaljenost točke od trokuta nije jednostavno za izračunati kao što bi se moglo pomisliti na prvi pogled. To je zbog toga što postoji mnogo različitih slučajeva. Točka može biti najbliža ravnini trokuta, najbliža bridu trokuta ili najbliža vrhu trokuta. Metoda određivanja udaljenosti koja se koristi u ovom radu dobro je opisana u [4].

  Slika 9. Određivanje udaljenosti točke od trokuta

Normala od trokuta se može izračunati kao:

(3.4)

Kut između normale i je:

(3.5)

Udaljenost točke do njene projekcije na ravnini trokuta je:

(3.6)

Vektor iznosi:

(3.7)

Sada se može odrediti projicirana točka :

(3.8)

Da bi se odredilo je li projicirana točka unutra ili izvan trokuta i ako je izvan kojem je bridu ili vrhu najbliža potrebno je odrediti položaj točke u odnosu na tri vektora koji predstavljaju simetrale kutova:

  Slika 10. Određivanje položaja točke u odnosu na simetrale kutova

         (3.9)

Ako je , i kažemo da se nalazi iznad vektora (ili da se nalazi suprotno od smjera kazaljke na satu u odnosu na ). Na isti način se mogu i izračunati i . Koristeći , i može se odrediti položaj točke u odnosu na , i . Ako se nalazi ispod i iznad točka je unutar trokuta ako je:

(3.10)

Slijedi da je udaljenost točke od trokuta jednaka .

Ukoliko je izraz (3.10) neistinit točka je izvan trokuta i potrebno je odrediti je li najbliža bridu ili vrhu.

Smjer od (projekcija na ravninu) prema (projekcija na brid) jednak je:

(3.11)

Kut između vektora i je:

(3.12)

Udaljenost točke do njene projekcije na bridu je:

(3.13)

Vektor iznosi:

(3.14)

Sada se može odrediti projicirana točka na bridu

(3.15)

Neka je:

(3.16)

Gdje je predznak negativan ukoliko je .

Ako je , je između i , znači da je točka najbliža bridu . Udaljenost od brida je izračunata u (3.13)  a udaljenost od brida je .

Ako je , je najbliža točki , i udaljenost od trokuta je
Ako je , je najbliža točki , i udaljenost od trokuta je .

  Na sličan način se izračuna udaljenost točke od trokuta za slučaj kada se nalazi ispod i iznad , te slučaj kada se nalazi ispod i iznad .