Autor Wątek: Kolizja z trojkatem  (Przeczytany 4212 razy)

RageX

  • Gość
# Czerwiec 11, 2007, 02:34:13
Heheh. No mi działa tamto. Co prawda pisałem swoje od nowa z pomocą jego teorii. Do momentu...

Stanęło narazie na tym że nie mam jak przeprowadzić ponownego testu na kuli która się kręci wokół krawędzi. Coś jak idziesz w stronę lampy, odchyla cię od lampy sinusem na bok, i w trakcie tego ruchu wchodzi w ścianę. Pewnie będe musiał jakieś obejście zrobić. Bo matematycznego rozwiązania poza sprowadzaniem wszystkiego do przestrzeni sferycznej... nie widze. A w przestrzeni sferycznej pozostałe testy musiałbym od nowa napisać...

A co do poziomu tej pracy to zaświadczam że jest bardzo dobra.
Jest kilka nieścisłości oczywiście, np.
Edit: I tu znów się rozpisałem o niuansach technicznych... ale stwierdziłem że mało kto to skuma, a jesli skuma to i tak mu się nie przyda, więc sobie darowałem.

A co do kodu, to autor pisze nie raz że ten kod to tylko taki pokaleczony przykład. Jak dla mnie to ten kod czytelny jest, może nie cały czytałeś, coś ominąłeś.

Offline Mr. Spam

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

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Czerwiec 11, 2007, 16:00:56
jak ten tutorial jest do dupy, nie mozna zczaic o co chodzi temu gosciowi Nawet kodu na implementacje rekursywy :S i w ogole to co to jest te sliding plane, jak u mnie to przestalo istniec zeby stawiac jakis warunek ze jak sie slizga to cos tam :0
KURDE, weź przeczytaj ten swój post i spróbuj zrozumieć co chciałeś przez to powiedzieć! Naucz się wreszcie pisać prawdziwe zdania jak człowiek na poziomie, a nie zrzucać przez klawiaturę na forum strumień swoich chaotycznych myśli :P Sory ale nie mogłem się powstrzymać.

Offline Oti

  • Użytkownik

# Czerwiec 11, 2007, 16:17:17
Pisalem juz, ze to ma byc kolizja kwadratu z trojkatem. Chcialbym to zrobic na zasadzie , ze mam strukture trojkata(zawiera jego trzy wierzcholki) oraz funkcje kolizjii typu bool(ktora wylicza gdzie sa krawedzie tegoz trojkata, i sprawdza czy nastapila kolizja) dokladnie tak jak mialem z kolizja kwadratu z kwadratem. Bardzo
duzo glowkoje i nie moge wpasc na ten sposob.  Mysle sobie ,ze do tej struktury dodam takze 3 tablice dwu-wymiarowe do ktorych bede wpisywal wspolzedne x i y odpowiednich bokow.

P.S. Wiecie do czgo jest mi to potrzebne? ^^ Kiedy zagralem w Alien Shooter to natchnelo mnie do zrobienia jakiejs strzelanki. Mysle ze zrobienie prostego shootera z widokiem od gory nie bedzie az takim wielkim wyzwaniem ;). A kolizja z trojkatem jest mi tutaj glownie potrzebna  do wyznaczenia w ktorym kierunku patrzy bohater(HA, niespodziewaliscie sie , CO? :P:P:P). Mozliwe ze sa jakies inne, lepsze sposoby zeby to osiagnac ale ja na takowy nie wpadlem :) CYA ALL :P

Offline k_b

  • Użytkownik
    • Blog

# Czerwiec 11, 2007, 18:23:37
P.S. Wiecie do czgo jest mi to potrzebne? ^^ Kiedy zagralem w Alien Shooter to natchnelo mnie do zrobienia jakiejs strzelanki. Mysle ze zrobienie prostego shootera z widokiem od gory nie bedzie az takim wielkim wyzwaniem ;). A kolizja z trojkatem jest mi tutaj glownie potrzebna  do wyznaczenia w ktorym kierunku patrzy bohater(HA, niespodziewaliscie sie , CO? :P:P:P). Mozliwe ze sa jakies inne, lepsze sposoby zeby to osiagnac ale ja na takowy nie wpadlem :) CYA ALL :P
Mogłeś od razu, w pierwszym poście tego wątku napisać do czego Ci to potrzebne? Dlaczego? Bardzo możliwe, że po pierwszych kilku odpowiedziach byś znał rozwiązanie tematu. Polecam lekturę "Jak mądrze zadawać pytania" (http://rtfm.killfile.pl/). Żeby nie było, że 'nie dałem żadnych dowodów' ( ;) ), zacytuję fragment tego świetnego artykułu:
Cytuj
Jeżeli próbujesz dowiedzieć się, jak coś zrobić (a nie zaraportować błąd), zacznij od przedstawienia celu. Dopiero potem wypunktuj kroki prowadzące do tego, na czym utknąłeś.
(...)
Głupio:
Jak ustawić przycisk kolorów w programie FooDraw, aby otrzymać heksadecymalną wartość RGB?

Mądrze:
Próbuję zastąpić tablicę kolorów w obrazku wybranymi przez siebie wartościami. Jedyne wyjście, jakie widzę, to edycja każdej tablicy, ale nie mogę w programie FooDraw zmusić przycisku kolorów do pobrania heksadecymalnej wartości RGB.

Offline Demon

  • Użytkownik

# Czerwiec 11, 2007, 20:41:27
Ja proponuję zrobić z 3 krawędzi trójkąta 3 wzory parametryczne:

V1 = P1 + t1*(P2-P1)
V3 = P2 + t2*(P3-P2)
V2 = P3 + t3*(P1-P3)

analogicznie zrobić 4 wektory z krawędzi kwadratu/prostokąta i po kolei testować każde równanie kwadratu/prostokąta z każdym z równaniem trójkąta, jak parametr t będzie się zawierał w przedziale [0;1] to masz kolizję i możesz wyliczyć punkt kolizji, jeżeli masz kilka punktów kolizji to ten którego parametr t jest najmniejszy jest prawidłowym punktem kolizji.

Jest jeszcze SAT: http://www.harveycartel.org/metanet/tutorials/tutorialA.html
« Ostatnia zmiana: Czerwiec 11, 2007, 20:57:10 wysłana przez Demon »

Offline ziomber

  • Użytkownik

  • Zbanowany
# Czerwiec 11, 2007, 23:10:03
function n2disPointinTriangle(P, P1, P2, P3: TextPoint): Boolean;
  var
    t1, t2, t3: single;
  begin
    t1 := (P3.Y-P1.Y)*(P.X-P1.X) - (P3.X-P1.X)*(P.Y-P1.Y);
    t2 := (P2.Y-P3.Y)*(P.X-P3.X) - (P2.X-P3.X)*(P.Y-P3.Y);
    t3 := (P1.Y-P2.Y)*(P.X-P2.X) - (P1.X-P2.X)*(P.Y-P2.Y);
    if ((t1>0)and(t2>0)and(t3>0))or((t1<0)and(t2<0)and(t3<0)) then
      Result := True
    else
      Result := False;
  end;

Offline Oti

  • Użytkownik

# Czerwiec 11, 2007, 23:13:01
W sumie to wpadlem teraz na inny sposob zrobienia zeby bohater patrzyl w odpowiednia strone:

http://www.oti-page.w8w.pl/rysunki/inne/pomysl_patrzenia.bmp/

co o tym myslicie? ale oczywiscie kolizja kwadratu z trojkatem bedzie takze bardzo niezbedna :]

@ziomber: moglbys mi to jakos objasnic? ja nie znam pascala/delphi. I co to sa P1-P3, t1-t3 i czym jest
typ single? A takze co to za typ "TextPoint"?

RageX

  • Gość
# Czerwiec 12, 2007, 00:15:27
Ja chwile używałem pascala...
kumam że rózne P to to jakieś struktury z 2 floatami x i y.
single i double to róznie dobierane nazwy dla określenia floatów o precyzji 32 bitowej i 64 bitowej.
czyli tutaj floaty o precyzji 32 bitowej (zazwyczaj tych się używa).

EDIT: Najlepiej weź dobry tutorial do matmy wektorowej zamiast czytac te mje wypociny tu na dole.
Zazwyczaj w geometrii wektorowej gdy widzisz że odejmuje sie wektor jeden od drugiego, oznacza to że szukamy stosunku tego wektora od drugiego. np.
masz dwa wektory p0 i p1, jeśli od obu odejmiesz p0 to będziesz miał...
p0 w punkcie 0,0 i wektor p1 który wyraża połozenie wektora p1 względem 0,0.
Czasami taka operacja może nam poprawić precyzje. np przy ray-Tri intersection ja odejmuje od wszystkich wektorów ray Origin. Bez tego, nie które tesy odbywały się w kawałku przestrzeni o przesunięciu 150, 150. Bez wnikania w szczegóły... bez operacji translacji traciłem na oko dwa zera (heh, nie dokładnie 2 zera, w końcu float to nie decimal).
PS. znowu namieszałem... słaby ze mnie nauczyciel.
Edit2: popraw linke... to łamanie na końcu.
« Ostatnia zmiana: Czerwiec 12, 2007, 00:28:39 wysłana przez RageX »

Offline LOG_AN

  • Użytkownik

# Czerwiec 12, 2007, 00:26:41
W sumie to wpadlem teraz na inny sposob zrobienia zeby bohater patrzyl w odpowiednia strone:

http://www.oti-page.w8w.pl/rysunki/inne/pomysl_patrzenia.bmp/

co o tym myslicie? ale oczywiscie kolizja kwadratu z trojkatem bedzie takze bardzo niezbedna :]

@ziomber: moglbys mi to jakos objasnic? ja nie znam pascala/delphi. I co to sa P1-P3, t1-t3 i czym jest
typ single? A takze co to za typ "TextPoint"?

Ten link cos nie dziala, a jestem ciekaw jaki to pomysl.

Offline ziomber

  • Użytkownik

  • Zbanowany
# Czerwiec 12, 2007, 15:46:58
sinle to float
Cytuj
Single   1.5 x 10^-45 .. 3.4 x 10^38   7-8   4
, a textpoint


to struct
float x,y;