Więc mam obiekt poruszający się w kierunku stałej poziomej lub pionowej ściany. Jak obliczyć kąt, pod jakim obiekt powinien się odbić? Obiekt może zbliżyć się do ściany pod dowolnym kątem.
źródło
Więc mam obiekt poruszający się w kierunku stałej poziomej lub pionowej ściany. Jak obliczyć kąt, pod jakim obiekt powinien się odbić? Obiekt może zbliżyć się do ściany pod dowolnym kątem.
Jeśli znasz normalny wektor ściany i masz kierunek do obiektu, to chcesz uzyskać odbicie wektora w płaszczyźnie .
Jeśli n jest znormalizowanym wektorem, a v jest kierunkiem przychodzącym , to czego chcesz - - (2 ( n · v ) n - v ). Znak minus uwzględnia fakt, że formuła odbicia w rzeczywistości nie odwraca kierunku, ponieważ zmieniałaby się prędkość obiektu.
Ta odpowiedź jest podana w kategoriach matematyki wektorowej, a nie kąta, ponieważ jest to zwykle lepsze, jeśli nie masz wyraźnego powodu, aby użyć kąta. Pamiętaj, że jeśli musisz mówić o kątach, kąt odbicia jest równy kątowi padania. Jeśli kąt jest mierzony od normalnego, kąt wychodzący jest negacją kąta wejściowego; jeśli kąt jest mierzony od ściany, jest to uzupełnienie kąta wejściowego.
Nie określono, czy była to gra 2D czy 3D. Ale jeśli jest to gra 2D, a twoje ściany są gwarantowane w poziomie lub w pionie, a chcesz po prostu odbić obiekt od nich, istnieje znacznie łatwiejszy sposób niż radzenie sobie z odbiciami.
Po prostu zaneguj składową X prędkości obiektu przy uderzeniu w ścianę pionową lub składową Y prędkości obiektu przy uderzeniu o ścianę poziomą. Przykład:
Ale jeśli naprawdę zależy ci na znajomości kąta, to ogólnie biorąc, kąt odbicia jest taki sam, jak kąt padania. Kąt ten jest mierzony w stosunku do normalnej ściany. Oto zdjęcie, które powinno to wyjaśnić:
Na wypadek, gdybyś musiał poradzić sobie z tym w przypadku dowolnych ścian, musisz zastanowić się, jak odzwierciedlić wektor. To tak naprawdę niewielka formuła, która bierze normalną ścianę i wektor padania, i zwraca wektor odbity dla ciebie. Oto wzór używany przez XNA:
A dla 2D możesz po prostu zrobić:
źródło
if it's a 2D game and your walls are guaranteed to be horizontal or vertical
jest nieprawidłowe. Druga część odpowiedzi dotyczy poprawnej implementacji. IMHO kolejność części powinna zostać odwrócona, przedstawiając najpierw ogólne rozwiązanie, z naciskiem, podczas gdy rozwiązanie kąta prostego przedstawiono jako uproszczenie w wyjątkowym przypadku.Chodzi tu o odbicie wektora wzdłuż ścian normalnego wektora.
http://www.3dkingdoms.com/weekly/weekly.php?a=2
źródło