Początkowo próbowałem zastosować prostokątne przecięcie, które działa dobrze. Kiedy jednak muszę zastosować układ fizyki, taki jak prędkość, przyspieszenie i wektory kierunkowe, musiałbym znaleźć sposób na określenie, która strona kolizji zderza się. Teraz w moim systemie nie ma obróconego prostokąta, więc uprościło to problem. Nie znalazłem jednak łatwego sposobu na określenie, która strona prostokąta zderzyła się. Kiedyś już miałem do czynienia z tym problemem, ale poniosłem porażkę.
To, co zrobiłem w przeszłości, to określenie odległości między każdym równoległymi prostokątnymi bokami i sprawdzenie, czy odległość jest bliska 0 (użyj pewnego wstępnie zdefiniowanego zakresu odległości) lub wynosi 0. Jednak w przypadku arytmetyki zmiennoprzecinkowej okazuje się to niestabilne, ponieważ upływ czasu nieznanego czasu. Czasami prostokąty przecinają się, zanim osiągną zdefiniowany zakres.
Z drugiej strony myślałem o spawnowaniu wielu prostokątów, każdy prostokąt dla każdej strony. Jednak po ponownym przemyśleniu byłoby to tym samym, co równoległa strona ze sprawdzaniem zasięgu odległości, tyle że ten zasięg odległości jest szerokością każdego mini-prostokąta.
Dlatego jakieś sugestie dotyczące tego problemu?
źródło
Odpowiedzi:
Na podstawie mojej odpowiedzi na pytanie „Która strona została trafiona?” :
Sugeruję obliczenie sumy B i A Minkowskiego , która jest nowym prostokątem, i sprawdzenie, gdzie środek prostokąta A leży w stosunku do tego nowego prostokąta (aby wiedzieć, czy dochodzi do kolizji) i jego przekątnych (aby wiedzieć, gdzie kolizja dzieje się):
źródło