Mam problem z niewyrównanym unikaniem kolizji w przypadku, który moim zdaniem jest rzadki. Ustawiłem dwa obiekty tak, aby zbliżały się do siebie, ale z niewielkim przesunięciem, więc jeden z nich porusza się lekko w górę, a jeden z nich porusza się lekko w dół.
W moim niewyrównanym algorytmie sterowania unikaniem kolizji znajduję punkty na linii przedniej obiektu i linii przedniej drugiego obiektu, gdzie te dwie linie są najbliższe. Jeśli te najbliższe punkty znajdują się w odległości unikania kolizji, a odległość między nimi jest mniejsza niż dwa promienie sfer ograniczających dwa obiekty, obiekty powinny skierować się w odpowiednim kierunku.
Problem polega na tym, że w moim przypadku oblicza się, że najbliższe punkty na liniach znajdują się naprawdę daleko od rzeczywistego punktu kolizji. Jest tak, ponieważ dwie linie do przodu dla każdego obiektu oddalają się od siebie, gdy obiekty mijają. Problem polega na tym, że z tego powodu nie odbywa się sterowanie, a dwa obiekty częściowo się zderzają.
Czy ktoś ma jakieś sugestie, jak poprawnie obliczyć punkt zderzenia? Być może w jakiś sposób biorąc pod uwagę wielkość dwóch obiektów?
źródło
Odpowiedzi:
To zdecydowanie najlepszy artykuł na temat wykrywania kolizji między piłkami.
Lekcje sali bilardowej: szybkie, dokładne wykrywanie kolizji między kołami lub sferami
źródło
Nie chcesz znaleźć najbliższego punktu.
Chcesz znaleźć punkt na liniach, w którym odległość jest równa połączonym promieniom obu sfer.
źródło
Jeśli dobrze rozumiem twoje pytanie, możesz po prostu użyć testu przecięcia Sfera vs Sfera, jak sugeruje AttackingHobo.
Matematyka przeprowadzania takiego testu jest następująca (popraw mnie, jeśli się mylę, minęło trochę czasu). Uwzględnia to również fakt, że każda sfera ma zmienną środek i promień.
Formuła sprawdzania wygląda mniej więcej tak:
Masz przecięcie sfery z kulą. Jest to dość proste, zobaczmy, jak to wygląda w kodzie!
Ponownie myślę, że jest to poprawna odpowiedź, której możesz szukać. Jeśli ktoś wie, że to źle, popraw mnie, ponieważ minęło trochę czasu, odkąd zrobiłem tę matematykę.
źródło
Ok, mam nadzieję, że to ma sens ... Pobierz wektory kul i oblicz ich punkt zderzenia, nazwij to p1. Znajdź kąt między 2 wektorami, nazwij to a1. Na linii 1/2 narysuj linię, która będzie dokładnie pośrodku w stopniach między dwoma wektorami. Potrzebujesz miejsca na tej linii, w którym sin (a1 / 2) = (promień 1 + promień 2) / 2. Jeśli ten obraz jest wizualizowany w mojej prawej głowie, to tutaj dochodzi do kolizji. Przepraszam, jeśli to źle ... jest późno.
źródło