kąt odbicia

0

Witam, mam dosc głupi problem, otóż piszę ponga, i nie wiem, jak obliczyć kąt odbicia piłeczki.
mój kod:

Kopiuj
  constexpr float M_PI =  3.14159265;
   const float ballSpeed = 10.0f;
    float ballAngle = 180.0*M_PI/180.0; // z stopni na radiany
// inna czesc kodu:

float ball = ballAngle*180/M_PI; // - z radianów na stopnie
float newBallAngle = ????

Wizualizacja oco mi chodzi:
http://brasil.cel.agh.edu.pl/~12utkocerba/optyka/acces/pictures/obrazek_7_2.gif
Nie wiem jak napisać algorytm do tego..

edytowany 1x, ostatnio: Shalom
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0
Kopiuj
newBallAngle = M_PI-ballAngle;

Nie rób tego na kątach, zrób to na wektorach.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
0

Mogę prosić jakiś działający przykład z użyciem wektorów? ew. jakiś tutorial? Google nie daje zbyt wiele wyników

satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
1

Przede wszystkim jeśli zakładasz, że ściany będą zawsze zgodne z osiami układu współrzędnych, to możesz po prostu negować składową wektora prędkości (x/y) w zależności od kolizji ze ścianami lub sufitem/podłogą.
Jeśli jednak chciałbyś zdefiniować planszę, w której ściany mogą znajdować się pod dowolnym kątem, to wyznaczaj wypadkowy wektor prędkości (w) z takiego wzoru:
w = k - u, gdzie
k = v - u,
u = (v o n / n o n)n,
v - wektor prędkości podczas kolizji,
k - składowa wektora v, równoległa do płaszczyzny, z którą następuje kolizja,
u - składowa wektora v, prostopadła do płaszczyzny, z którą następuje kolizja,
o - iloczyn skalarny.
To wszystko oczywiście dotyczy zderzenia doskonale sprężystego.

edytowany 1x, ostatnio: satirev
MarekR22
forum ma wparcie tex-a coś takiego <tex>c = \vec k \cdot \vec w</tex>

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.