W celach rozrywkowych (kto to słyszał, programować dla rozrywki?) postanowiłem spróbować się w napisaniu bilarda. Nie ukrywam, że najwięcej problemów sprawia mi fizyka, ale i detekcja i odpowiednie zachowanie się bil po kolizji. Tutaj akurat poruszę problem głównej i detekcji kolizji.
Zwykła detekcja, czy dwie kulki na siebie nachodzą sprawia problemy - mogą się zderzyć więcej niż dwie bile, w "stykowych" sytuacjach bardzo ważna jest kolejność kolizji, więc potrzebne jest jakiś bardziej skomplikowany system.
Wymyśliłem sobie, że powinno to wyglądać mniej więcej tak:
while(true)
{
- Mierzymy czas t od ostatniego przebiegu
- Wykrywamy wszystkie kolizje, mierzymy dla każdej czas (dt), po jakim zaszła, sortujemy kolizje od najwcześniejszej
- Po kolei analizujemy kolizje:
- Sprawdzamy ile z nich wystąpiło w tym samym czasie (dt takie samo w pewnym przybliżeniu)
- Obliczamy nowe prędkości dla bil w kolizji, uaktualniamy ich pozycje
- Usuwamy z listy kolizje, w których uczestniczyły te bile
- wykrywamy i dodajemy do listy wszystkie kolizje, które zaszły dla tych bil po odbiciu
- Gdy wszystkie kolizje zostały przerobione, wyświetlamy co trzeba i wracamy na początek
Czy takie coś ma szanse przejść (i fizycznie, i wydajnościowo)? Może coś w takim pomyśle zmienić?