Skocz do zawartości

Odbicie


Exigo

Rekomendowane odpowiedzi

Mamy bloczek z współrzędnymi x1, y1, x2, y2. Mamy też piłkę, ewentualnie klocuszek - też posiadającą pozycję x1, y1, x2, y2, oraz prędkość pionową i poziomą. A pytanie jest takie - jak z pomocą tych danych wykryć czy kolizja pomiędzy bloczkiem, a kulką ma miejsce w osi pionowej czy poziomej? (cel w tym że chcę na podstawie tych zmiennych zwrócić odbicie klocka) ; D

Odnośnik do komentarza
Udostępnij na innych stronach

predkosc po odbiciu

V' = V - 2n(V o n) gdzie n to ten wektor normalny powierzchni a V pilki, a o iloczyn skalarny

 

ahm nvm

jezeli masz tylko bloczki osiowo wystarczy ze bedziesz robil cos w stlyu

 

ruchPoY();

if(kolizja) odwroc predkosc na osi y

ruchPoX()

if(kolizja) odwroc predkosc na osi x

Odnośnik do komentarza
Udostępnij na innych stronach

Nie w tym rzecz, prawdopodobnie źle mnie zrozumiałeś. Obiekt nie zmienia pozycji "albo tylko i wyłącznie po x, albo tylko i wyłącznie po y".

Załóżmy że piłka porusza się jednocześnie w obydwu osiach. Przykładowo uderza od spodu, i używając twojej koncepcji - odbije się jednocześnie w osi pionowej jak i poziomej. W efekcie będzie się poruszać tą samą drogą którą 'przyleciała', tylko że w odwrotnym kierunku.

Dlatego chcę uzyskać coś, co będzie sprawdzać z której strony piłka uderza (czy z góry, z prawej, etc.) - dzięki czemu będę mógł ustalić 'odwracanie' odpowiednich prędkości.

Więc, jakieś pomysły? ; D

Odnośnik do komentarza
Udostępnij na innych stronach

Prędkość jest wektorem. To wiesz chyba z I klasy gimnazjum fizyki?

 

Pozycja.X += Predkosc.X * deltaT;

if(Kolizja) {Pozycja.X -= Predkosc.X * deltaT; Predkosc.X *= -1; } //cofnij i odwroc

Pozycja.Y += Predkosc.Y * deltaT;

if(Kolizja) {Pozycja.Y -= Predkosc.Y * deltaT; Predkosc.Y *= -1; } //cofnij i odwroc

Odnośnik do komentarza
Udostępnij na innych stronach

Prędkość jest wektorem. To wiesz chyba z I klasy gimnazjum fizyki?

 

Pozycja.X += Predkosc.X * deltaT;

if(Kolizja) {Pozycja.X -= Predkosc.X * deltaT; Predkosc.X *= -1; } //cofnij i odwroc

Pozycja.Y += Predkosc.Y * deltaT;

if(Kolizja) {Pozycja.Y -= Predkosc.Y * deltaT; Predkosc.Y *= -1; } //cofnij i odwroc

przypuszczam, że jemu właśnie chodzi o to jak wyznaczyć te kolizje, a to, co piszesz, jest raczej oczywiste ;p

Odnośnik do komentarza
Udostępnij na innych stronach

Prędkość jest wektorem. To wiesz chyba z I klasy gimnazjum fizyki?

 

Pozycja.X += Predkosc.X * deltaT;

if(Kolizja) {Pozycja.X -= Predkosc.X * deltaT; Predkosc.X *= -1; } //cofnij i odwroc kolizja na osi x

Pozycja.Y += Predkosc.Y * deltaT;

if(Kolizja) {Pozycja.Y -= Predkosc.Y * deltaT; Predkosc.Y *= -1; } //cofnij i odwroc kolizja na osi y

 

o boze stary nie zalamuj

jak ruszasz sie poziomo, sprawdzasz kolizje -> kolizja na osi X

jak ruszasz sie pionowo potem i po tym ruchu masz kolizje -> os Y

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...