Autor Wątek: SAT - Detekcja MTD  (Przeczytany 3885 razy)

RageX

  • Gość
# Lipiec 07, 2007, 00:52:04
zrzutuj wszystkie wierzchołki(te do sprawdzenia) na odcinek prostopadły(perproduct/ normalna linii) do danej osi i szukasz najbliższego zeru, ot cała tajemnica... jesli nie oto chodzi, to ja nie wiem o co chodzi.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Moriturius

  • Użytkownik

# Lipiec 07, 2007, 09:46:34
zrzutuj wszystkie wierzchołki(te do sprawdzenia) na odcinek prostopadły(perproduct/ normalna linii) do danej osi i szukasz najbliższego zeru, ot cała tajemnica... jesli nie oto chodzi, to ja nie wiem o co chodzi.
O to wlasnie chodzi. Moj problem jest taki, ze tych wierzcholkow moze byc wiecej - jesli ktorys bok bedzie prostopadly do podanej osi. Chce miec je wszystkie.

Probowalem tak zeby najpierw wyznaczyc ta minimalna dlugosc, a potem szukac wszystkich ktore maja taka dlugosc - nie dziala :|
Moze jest to zwiazane z niedokladnoscia FLOAT? Bo nic innego mi juz nie przychodzi do glowy, ale jesli to przez FLOAT to nadal pozostaje pytanie - to jak to ominac?!

Posiedze przy tym dzisiaj moze cos madrego wymysle ;)

//EDIT:
No i wszystko jasne! Problem oczywiscie lezal w przyblizeniach FLOAT'a. Zmienilem kod:
Kod: (cpp) [Zaznacz]
if( dpTable[i] == mind ] )
na
Kod: (cpp) [Zaznacz]
tmp = dpTable[i] - mind;
if( ABS(tmp) <= 0.001f )

I teraz smiga bez problemu :)
« Ostatnia zmiana: Lipiec 07, 2007, 10:43:56 wysłana przez Moriturius »

RageX

  • Gość
# Lipiec 07, 2007, 11:02:42
Toż to oczywiste... :D

OT
Swego czasu (dawno temu i nie ważne) byłem przekonany o tym jakie to komputery i ich obliczenia są wy...iste, dokładne itd. Ale gdy zaczynamy juz pierwiastkować na ten przykład(czyli w tym wypadku liczyć długość, odległość), to żadna dokładność nam nie zagwarantuje precyzji 100%. Świat nauki oczywiście robi coś w tym kierunku... np. programowanie funkcjonalne... Ale przed nami długa droga zanim będziemy w stanie super skutecznie tego używać.
/OT

Offline Moriturius

  • Użytkownik

# Lipiec 07, 2007, 12:00:42
Toż to oczywiste... :D

No mnie to chodziło po głowie, ale nigdy nie miałem problemów z floatami - widocznie miałem szczęście :P

Offline Hadrian W.

  • Użytkownik
    • Homepage

# Lipiec 07, 2007, 12:26:54
Heh ... fajnie wszystko tylko, że jeśli to ma być wykrywanie kolizji do fizyki to i tak nic z tych pomysłów nie będzie :D

Powód prosty, nie wystarczy wykryć jednego punktu najbliższego, bo fizyka będzie niestabilna, więc potrzebne dwa punkty podparcia i robi się to przez przycinanie ścian albo stosując pewne uproszczenia założenia dotyczące geometrii, ale ja nie o tym chciałem pisać, bo problem jest inny.
Troszkę się podłączę... Masz na myśli coś takiego?

Offline Spider100

  • Moderator
    • Strona domowa

# Lipiec 07, 2007, 14:02:59
Queight nie do końca Ty podałeś tylko punkty przecięć, a to nam niewiele mówi o kolizji nie mają nic wspólnego z odchyleniem od poprawnego stanu.

Coś takiego miałem na myśli
http://img300.imageshack.us/my.php?image=ryspp1.jpg
Chodzi o to że w czasie spoczynku dwa obiekty nie mogą mieć jednego punktu kolizji bo wtedy będzie on się co chwile zmieniał i wszystko skacze.

Offline Moriturius

  • Użytkownik

# Lipiec 07, 2007, 14:17:31
Chodzi o to że w czasie spoczynku dwa obiekty nie mogą mieć jednego punktu kolizji bo wtedy będzie on się co chwile zmieniał i wszystko skacze.

Fakt. Pozniej pewnie bede sie zastanawial nad modulem fizyki to bede musial to wszystko przemyslec, ale poki co skonczylem te kolizje convex polygonow przy pomocy SAT.

Specjalnie dla was zrobilem male demko :P
http://www.mediafire.com/?5ddo9gsh1ry

Szalowe nie jest, ale przynajmniej widac ze dziala ^^

EDIT2: na serwer wgralem juz ZIP z audiere.dll, wiec nie trzeba go sciagac :) [poprawilem link tutaj ]
« Ostatnia zmiana: Lipiec 07, 2007, 14:57:50 wysłana przez Moriturius »