Muszę odświeżyć moją trygonometrię i mam nadzieję, że pomożesz tutaj z prostym modelem matematycznym. Oto mój model do tej pory na załączonym obrazku. Wiem, że animacja klatki ma inne problemy, gdy piłka porusza się bardzo szybko, ale na razie muszę tylko obliczyć ballDx i ballDy. Możliwe jest również, że ballDx = 0 (tylko ruch pionowy), ale gdy piłka się odbije, ballDx może otrzymać inną wartość.
46
Odpowiedzi:
Uwaga: Wszystkie poniższe założenia zakładają, że powierzchnia piłki jest wolna od tarcia (więc nie zacznie się obracać ani odbijać inaczej, ponieważ jest).
W momencie zderzenia piłka dotknie rogu. Kiedy zderzą się obiekty stałe, siła będzie działać wzdłuż tak zwanej powierzchni normalnej, tj. Prostopadłej do powierzchni w punkcie zderzenia.
Ponieważ jest to piłka, prostopadła do powierzchni jest skierowana do środka piłki. Ok, więc znamy kierunek siły, a co z jej wielkością? Zakładając, że zderzenie sprężyste (i prostokąt nie może się poruszać), piłka musi odbić się z taką samą prędkością, z jaką uderzyła.
Niech (nDx, nDy) będzie prędkością po zderzeniu, (oDx, oDy) prędkością przed zderzeniem oraz (x, y) pozycją kuli w punkcie zderzenia. Załóżmy dalej, że róg, z którym zderza się piłka, wynosi (0,0).
Wyrażając nasze spostrzeżenia jako formuły, mamy:
Co odpowiada:
Podstawiając dwa pierwsze równania w ostatnim, otrzymujemy:
Rozwijanie za pomocą twierdzenia dwumianowego
daje:
To równanie kwadratowe
c
ma dwa rozwiązania, z których jedno wynosi 0. Oczywiście nie jest to rozwiązanie, które nas interesuje, ponieważ ogólnie kierunek piłki zmieni się w wyniku zderzenia. Aby uzyskać inne rozwiązanie, dzielimy obie strony przez c i otrzymujemy:To jest:
Podsumowując, mamy:
Edycja : W kodzie:
Kilka uwag dotyczących implementacji: Chociaż można przybliżać (x, y) pozycją kuli po etapie symulacji, to przybliżenie zmieni kąt odchylenia, a zatem będzie bardzo zauważalne, więc kroki symulacji muszą być bardzo dokładne (być może takie, aby piłka nie porusza się więcej niż o 1/20 swojej średnicy na krok). Aby uzyskać dokładniejsze rozwiązanie, możesz obliczyć czas wystąpienia kolizji i podzielić ten krok symulacji w tym czasie, tj. Wykonać krok częściowy do momentu zderzenia i kolejny etap częściowy dla pozostałej części kroku.
Edycja 2: Obliczanie punktu uderzenia
Niech r będzie promieniem, (x0, y0) pozycją i (dx, dy) prędkością kuli na początku etapu symulacji. Dla uproszczenia załóżmy, że dany narożnik znajduje się w (0,0).
Wiemy:
Chcemy
To jest
To równanie kwadratowe wt. Jeśli jest dyskryminujący
jest negatywny, nie ma rozwiązań, tzn. piłka nigdy nie uderzy w róg na swoim obecnym kursie. W przeciwnym razie jego dwa rozwiązania są podane przez
Interesuje nas czas rozpoczęcia kolizji, czyli wcześniejszy
t1
.Twoja metoda stałaby się:
źródło
At the moment of collision, the ball will be touching the corner
ale nie widzę uzasadnienia tego przybliżenia (i musi to być przybliżenie, ponieważ to nieprawda - piłka dotyka dwóch miejsc, z których żadne nie jest narożnikiem).Oto wizualny sposób patrzenia na problem.
Oryginalny zestaw problemów to koło kontra prostokąt (szary na obrazku poniżej). Jest to równoważne punktowi z zaokrąglonym prostokątem (pokazanym na czarno).
To jest problem wieloczęściowy. Testujesz zderzenie punktowe z 4 liniami (wyciągniętymi z krawędzi pudełka przez promień oryginalnego koła) i 4 kółkami (w rogach prostokąta o tym samym promieniu oryginalnego koła).
Z przybliżoną prędkością na oryginalnym obrazie punkt uderzy w prawy dolny róg koła. Wszystko, co musisz zrobić, to ustalić punkt na okręgu narożnym, który byś uderzył, obliczyć kąt tego i odbić się od niego.
Wyprowadzę to jako ćwiczenie dla czytelnika.
źródło
Pracuję nad grą i również utknąłem tutaj. Ale myślę, że dzieje się w ten sposób:
Jest inny pogląd. Moim problemem jest to, że nie wiem, jak szybko obliczyć nowy dx, dy (dla mnie używanie tradycyjnej matematyki wymaga zbyt wielu obliczeń).
źródło
Kinematyka polega na wybraniu właściwej, jak najbardziej dogodnej do obliczeń, ramy odniesienia.
Tutaj najpierw zdefiniujemy transformację T, która rozkłada nasze osie na komponenty równoległe ( x ' ) i prostopadłe ( y' ) do linii między środkiem piłki a narożnikiem. Odwrotna transformacja T * przywróci nasz pierwotny układ współrzędnych.
W tym nowym układzie odniesienia przez odbicie (oraz symetrię czasową i przestrzenną fizyki) mamy transformację prędkości styku M ( impulsu punktowego ), która odwraca składową x ' i pozostawia niezmienioną składową y' . Pod względem macierzy jest to macierz diagonalna z -1 i 1 na przekątnej.
Zatem prędkość po zderzeniu wynosi po prostu: V ' = T * . M . T . Vo .
Czas oddziaływania t jest wówczas tylko rozwiązanie ( T . Do ) + ( X , T . Vo ) ( t ) = r , gdzie X jest operatorem projekcji osi X, a r oznacza promień kuli. Uporządkowane, otrzymujemy
t = ( R - ( t . Do )) / (( X , T . Vo ) ( t ))
Ma to tę wyraźną zaletę, że zakopuje całą złożoną matematykę w rygorystycznie napisanych, przetestowanych i debugowanych standardowych bibliotekach graficznych. To rozwiązanie jest również identyczne w sytuacjach 2D i 3D - wystarczy przełączyć bibliotekę graficzną. Na koniec podkreśla, że przed zmierzeniem się z jakimkolwiek problemem fizyki należy najpierw pomyśleć o odpowiednich ramach odniesienia . Zawsze istnieje pokusa NIH, ale tak naprawdę to tylko przepis na błędy, gdy dostępne są bardziej zwięzłe rozwiązania.
źródło