Xedom Opublikowano 21 Marca 2013 Udostępnij Opublikowano 21 Marca 2013 Hej ;) Mam problem z wymyśleniem dobrego sposobu na obliczanie, w jakim kierunku obiekt ma się odbić od ściany. Ściany są zapisywane na x1, x2, y1 i y2, a obiekt ma wielkość jednego piksela, więc tylko na pozycjach x i y. Chodzi mi o to, żeby sprawdzać, jaką prędkość x i y powinien uzyskać obiekt przy zderzeniu. Nie wiem, czy to co napisałem jest zrozumiałe, więc moja artystyczna dusza rozkazała mi stworzyć w Paintcie to cudo: Czerwona kropka to obiekt, czarne to ściana, szare to niesamowita wizualizacja odbicia obiektu, a litera "A" to kąt odbicia (w gruncie rzeczy chodzi o symetrię, nie wiem czy z tego obrazka to widać ;I) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 21 Marca 2013 Udostępnij Opublikowano 21 Marca 2013 A jak masz ruch zrobiony? Ja jak kleiłem ponga w SFMLu to brałem vspeed i hspeed kulki i przy uderzeniu odwracałem wartości ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Floodnik Opublikowano 21 Marca 2013 Udostępnij Opublikowano 21 Marca 2013 Pierwszy pomysł, korzystający z wiedzy licealnej :P Być może da się szybciej, być może po poskracaniu wyjdzie to co napisał @adam014(a być może co innego), ale przedstawię swój tok rozumowania. Nie zraź się do kiepskiego rysunku, powoli wszystko opiszę! 1) Mamy dane: x1, y1, x2, y2 - początek i koniec ściany, x0, y0 - punkt zderzenia ze ścianą, wektor v = [vx, vy] (a początek 0, 0 - początek układu współrzędnych) - prędkość kulki 2) Przeskalowuję sobie mój wektor, umieszczając go tak, by jego koniec znajdował się w miejscu zderzenia kulki ze ścianą. początek wektora: x0 - vx; y0 - vy, koniec: x0, y0. 3) Korzystamy ze wzoru na prostą, na której leżą dwa punkty(licealne, do poszukania w internecie jeśli nie znasz), otrzymujemy prostą, na której leżą x1, y1, x2, y2. Potem, korzystając z kolejnego wzoru, otrzymujemy prostą prostopadłą do niej przechodzącą przez punkt zderzenia. 4) Teraz odbijamy symetrycznie początek wektora względem naszej prostej prostopadłej - kolejny wzór licealny, może być przydatne wcześniejsze poprowadzenie prostej równoległej do naszej początkowej prostej zawierającej ścianę, bo na tej nowej prostej znajduje się docelowy koniec wektora(rysunek). Otrzymane współrzędne to koniec wektora. Początek wektora zaś to punkt zderzenia. 5) Przeskalowujemy wektor spowrotem, by jego początek pokrywał się z początkiem układu współrzędnych. To wszystko. Proponuję nie robić obliczeń na bieżąco zgodnie z powyższym planem działania, tylko wyprowadzić sobie algebraicznie ostateczne wzory na Vx, Vy(ostateczne współrzędne wektora prędkości, które nas interesują) i zobaczyć co się stanie. Unikniemy dużo niepotrzebnych obliczeń. Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 21 Marca 2013 Udostępnij Opublikowano 21 Marca 2013 v = v0 - 2 * n * dot(v0,n) v - wektor predkosci odbitej v0 - startowa n - prosta prostopadla do danej prostej, znormalizowana (tzw. normalna od powierzchni) dot - iloczyn skalarny @adam to zadziala tylko przy odbiciu od powierzchni pionowej/poziomej, nie pod dowolnym katem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę