Wykrywanie kolizji trójkątów

0

Czy ktoś z szanownych użytkowników forum wie jak to zrobić??

0

Pytanie ile masz tych trójkątów, w jakiej przestrzeni i jakie zastosowanie ma mieć program ;]

0

w euklidesowej przestrzeni dwuwymiarowej wystarczy sprawdzić, czy żaden wierzchołek nie leży na odcinku wyznaczającym bok innego trójkąta. trochę geometrii analitycznej i program gotowy...

EDIT:
hm, w sumie myślałem bardziej o modelowaniu ruchu, jeżeli dostajemy na przykład punkty i musimy sprawdzić, czy trójkąty się nie nakładają, sprawa jest trochę trudniejsza - musisz sprawdzić, czy żaden wierzchołek nie jest wewnątrz drugiego trójkąta.

0
dodekam napisał(a)

w euklidesowej przestrzeni dwuwymiarowej wystarczy sprawdzić, czy żaden wierzchołek nie leży na odcinku wyznaczającym bok innego trójkąta. trochę geometrii analitycznej i program gotowy...

Z powodu błędów zaokrągleń to raczej nie przejdzie. Trudno określić, czy dany punkt leży dokładnie na odcinku.

dodekam napisał(a)

musisz sprawdzić, czy żaden wierzchołek nie jest wewnątrz drugiego trójkąta.

To nie wystarczy. Weźmy dwa identyczne trójkąty równoboczne, obróćmy jeden o 180 stopni i nałóżmy na siebie. Powstanie sześcioramienna gwiazda. Żadne wierzchołki nie leżą wewnątrz.

0

no to może sprawdzić czy żaden punkt na odcinku ( tylko te ze współrzędnymi bez rozszerzenia dziesiętnego ) nie leży na terenie innego trójkąta?

0
Potwoor_ napisał(a)

no to może sprawdzić czy żaden punkt na odcinku ( tylko te ze współrzędnymi bez rozszerzenia dziesiętnego ) nie leży na terenie innego trójkąta?

A nie prościej sprawdzić czy krawędzie się nie przecinają?

0

Moim zdaniem wystarczy sprawdzić dwa warunki:
-czy któreś krawędzie się przecinają
-wziąć dowolny punkt jednego z trójkątów(najprościej wierzchołek) i sprawdzić czy nie leży wewnątrz drugiego trójkąta. Operację powtórzyć biorąc punkt z drugiego i sprawdzając, czy leży wewnątrz pierwszego.

Drugi warunek jest potrzebny, bo jeden trójkąt może zawierać drugi.

0

no i jest wszystko =D tylko teraz to zrobić biedaczysko będzie musiał =D

0
__krzysiek85 napisał(a)

To nie wystarczy. Weźmy dwa identyczne trójkąty równoboczne, obróćmy jeden o 180 stopni i nałóżmy na siebie. Powstanie sześcioramienna gwiazda. Żadne wierzchołki nie leżą wewnątrz.

Racja, o tym nie pomyślałem.

0

A zna ktoś link do jakiegoś gotowego przykładu,bo jak tak dla większej ilości to strasznie procesor chłonę się wydaje ;)??

0

ale powiedz do czego ci to ? jeśli chcesz wykryć kolizję w grze 3d to robi się to całkiem inaczej i takie rozwiązanie się nie nadaje
jeśli trójkątów jest mało a płaszczyzna jest dwuwymiarowa to może być takie rozwiązanie i nie powinieneś mieć problemów z zaimplementowaniem tego - pomyśl troche, wystarczą ci wiadomości z podstawówki

0

wystarczy sprawdzic czy znaki iloczynow wektorowych wierzcholkow ort! i dowolnego innego punktu sa zgodne czy nie,...

0

Może wyraziłem się nieco niejasno jasno, za co muszę przeprosić bo mi właśnie chodzi o wykrywanie w przestrzeni 3d.

0

to proponuje wziac google i zajrzec na tutoriali od grafiki 3d i 'poligon collision detection'.. jest tego na prawde wiele, widzialem nawet opisy jak to implementowac we Flashu (btw. pamietacie The N Game? mozna wyszperac artykul gdzie autor opowiada jak napisal silnik :) )

0
ktosi napisał(a)

Może wyraziłem się nieco niejasno jasno, za co muszę przeprosić bo mi właśnie chodzi o wykrywanie w przestrzeni 3d.

powiedzmy ze masz trojkat w ktorym jest jakis inny punkt, jezeli utworzysz dwa wektory: 1 - wektor z wierzcholka A i kolejnego wiercholka B, 2 - wektor z wiercholka A i punktu wewnatrz lub zewnatrz trojkata D i policzysz iloczyn wektorowy to mozesz sprawdzicz czy wyznaczk macierzy (iloczyn wektorowy liczy sie na macierzy) jest dodatni, 0, czy ujemny:

jezeli wszystkie trzy wyznaczniki sa tego samego znaku to punkt lezy wewnatrz trojkata (jest przeciecie)
jezeli choc jeden wyznaczkim ma inny znak to nie ma przeciecia bo punkt jest poza trojkatem
jezeli jest 0 to punkt lezy na boku trojkata

1 użytkowników online, w tym zalogowanych: 0, gości: 1