Autor Wątek: obijanie kulki od innej kulki  (Przeczytany 742 razy)

Offline krzmig

  • Użytkownik

# Listopad 05, 2009, 18:04:28
Witam,
szukałem na forum odpowiedzi ale niestety nie znalazłem, podobnie w google. Piszę grę w której chciałbym odbijać od jednej kulki drugą. Pierwsza kulka będzie sterowana przez gracza i może się poruszać w 8 kierunkach, druga natomiast ma się od niej odbijać. Żeby było łatwiej mi tłumaczyć zamieszczam obrazek:


Większa, jaśniejsza kulka jest sterowana przez gracza, ta mniejsza powinna się odbijać. Znam pozycję środków obu kul oraz kąt pod jakim porusza się mniejsza kulka (na jego podstawię poruszam kulką używając funkcji sin i cos), w tym wypadku przed odbiciem jest to coś koło 250 stopni, a po odbiciu bliżej 200 stopni (0 stopni jest pionowo w górę).

Przechodząc do obliczeń wyznaczam sobie boki trójkąta, przyprostokątne z różnicy odległości środków, natomiast przeciw prostokątny z twierdzenia pitagorasa. Kąt A obliczam z przekształconego twierdzenia cosinusów następnie mogę wyznaczyć kąt zielonej "ściany" bo teraz jak rozumiem wystarczy odbić piłkę jedynie zakładając że zielona linia jest ścianą i ma ona zmienny kąt.

Zanim nie zacząłem tego pisać wydawało się łatwe, teraz już mam lekko mówiąc dość xD po 2 dniach główkowania podzieliłem odbicia na 4 ćwiartki i je jeszcze na 4 ćwiartki, dla każdej wyznaczając osobny wzór a i tak działa tylko w części odbić...  jest jakiś wzór pozwalający wyznaczyć kąt po odbiciu?

pozdrawiam

Offline Mr. Spam

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

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 05, 2009, 18:10:10
Cytuj
Znam pozycję środków obu kul oraz kąt pod jakim porusza się mniejsza kulka (na jego podstawię poruszam kulką używając funkcji sin i cos)
Sugeruję zmianę zapisu wektora prędkości na bardziej klasyczne (x,y) zamiast (kąt, długość). Oszczędzi to wielu problemów, a przy okazji uprości problem odbicia kul.


Co do samego problemu, to rozwiązaniem jest klasyczne równanie odbicia:
R = V - 2N (N o V)

gdzie:
V - wektor początkowy,
R - wektor odbity,
N - wektor normalny punktu kolizji, musi mieć długość jednostkową (w tym przypadku będzie to wektor pomiędzy środkami kul, znormalizowany rzecz jasna)

I tyle. :)

Offline Liosan

  • Redaktor

# Listopad 05, 2009, 18:18:18
Generalnie, Twoje rozumowanie jest poprawne, tylko trochę na około. Rozumowanie Krzyśka jest dokładnie równoważne Twojemu (mimo, że pewnie nie widać tego na pierwszy rzut oka) ale prostsze w napisaniu (jak już się nauczysz tym posługiwać). Kąty, generalnie, są zbędne w programowaniu gier (zwykle). Zamiast tego używa się wektorów długości 1 - one jednoznacznie wyznaczają kat.

Liosan


Offline frea

  • Użytkownik