Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

wektor normalny

Ostatnio zmodyfikowano 2010-11-12 07:32
Autor Wiadomość
dmx81
Temat założony przez niniejszego użytkownika
wektor normalny
» 2010-11-11 18:10:00
result = v – 2*n * ( v . n )

korzystam z tego wzorku i sie tak zastanawiam - jesli pileczka odbija sie od sciany - a wektor normalny skierowany jest w strone przeciwna do niej, to ok, ale moze zdarzyc sie przypadek, ze wektor normalny bedzie skierowany rowniez w kierunku ruchu, np narysujemy kwadrat w ktorym pileczka sie odbija, ale w srodku kwadratu bedzie kreska(scianka) jesli odbije sie od jednej strony - to bedzie ok, ale jak odbije sie od drugiej strony - to przeleci przez ta scianke ?

pewnie trzeba by dopisac wykrywanie pozycji pileczki i wg tego okreslac zwrot(znak)wektora normalnego, co wy na to? jakies propozycje ?
P-23877
dmx81
Temat założony przez niniejszego użytkownika
» 2010-11-11 22:26:42
w sumie wymyslilem w miedzy czasie, ze mozna sprawdzic, czy dla danej sciany po wykryciu kolizji i zmianie kata - czy przy nastepnym ruchu wciaz wystepuje kolizja z ta sama sciana - jesli tak, znaczy trzeba zmienic znak wektora normalnego (musze tylko to zaimplementowac i sprawdzic w praktyce...) ale jesli ktos podejmowal ten temat i ja cos zle mysle,to naprowadzcie mnie na dobry trop :)
P-23895
DejaVu
» 2010-11-12 03:26:32
Proponuję rozpatrywać zderzenia piłki z prostą (odcinkiem), a nie ścianą.
P-23896
dmx81
Temat założony przez niniejszego użytkownika
» 2010-11-12 07:32:44
dokladnie tak robie :)

pilka: posX, posY, r, kat, speed

sciana: x1,y1,x2,y2 (klasa zawiera 2 wspolrzedne - rysuje linie-kreske)

z rownania prostej przechodzacej przez te 2 punkty wyznaczam prosta prostopadla do niej, przechodzaca przez srodek pilki, nastepnie obliczam punkt przeciecia prostej prostopadlej przechodzacej przez srodek pilki z prosta laczaca te dwa punkty - otrzymuje wspolrzedne odcinka (pilkax,pilkay),(pktprzecieciax,pktprzecieciay) (rownania prostej sa rozne dla x1==x2 i y1==y2 i jesli wszytskie sa rozne)
badam dlugosc odcinka -
rzutuje pozycje pilki na osie x i y - uwzgledniajac dlugosc promienia (aby nie tylko dla srodka byla kolizja, ale dla okregu)
jesli pilka znajduje sie w zasiegu prostej - sprawdzam, czy dlugosc odcinka prostopadlego do przeszkody jest krotsza od dl. promienia, jesli tak, to wtedy nastepuje kolizja

robie to w petli dla wszytskich scian - pileczka sprawdza odleglosc ze wszytskimi scianami, jesli dla ktorejs jest mniejsza niz promien, obliczam dla tej sciany normalna (wg tego co znalazlem, normalna ma wspolrzedne (y2-y1),(x1-x2) lub (y1-y2), (x2-x1)
- tutaj wlasnie decyduje sie o zwrocie wektora normalnej) po obliczeniu normalnej, normalizuje (do dlugosci =1)
nastepnie funkcja zwraca nowy wektor, wg wzoru ktory podalem wyzej - pileczka ma nowy wektor przemieszczania sie, dziala "prawie" poprawnie - ladnie sie odbija pod naturalnymi katami, ale zdarza sie taki przypadek, ze pileczka przelatuje przez jedna sciane i dlatego szukam rozwiazania. mam nadzieje, ze znajde powod, pewnie troszke nad tym posiedze w wolnej chwili

robilem juz kiedys kolizje bez obliczania normalnych - poprostu liczylem kat kazdej sciany (odcinka) z atan, pozniej przy kolizji obliczalem nowy kat pileczki(wektor ruchu) i uzaleznione bylo to od tego, w ktorej "cwiartce" znajduje sie kat(i dzialalo fajnie), teraz postanowilem to rozwiazac za pomoca normalnych - podobno mniej liczenia i czesciej wykorzystuje sie taka metode
P-23897
« 1 »
  Strona 1 z 1