• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeszukanie obszaru wokół punktu

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
185 wizyt
pytanie zadane 27 września 2017 w Algorytmy przez Pscoolka Nowicjusz (240 p.)
Zagadnienie: Jak najefektowniej przeszukać obszar w okół danego punktu, aby sprawdzić kolizje lub znaleźć wszystkie obiekty znajdujące się w pobliżu.

Przykład: Projekt gry 2D, kilka obiektów na mapie, gracz, kilka przedmiotów, kilka przeciwników czy inne. Potrzebuję sprawdzić czy nie występuje kolizja z przeciwnikami, oraz czy przedmioty są na tyle blisko gracza, aby mógł je podnieść. Mamy tablice, gdzie umieszczone są wszystkie obiekty.

Istnieje opcja przeszukania wszystkich elementów w tablicy i sprawdzanie dla każdego obiektu pozycji i porównanie jej z pozycją gracza.

Inną opcją jest utworzenie tablicy(dwuwymiarowej), gdzie indeksami będą współrzędne mapy, a obiekty przypisane zgodnie z ich miejscem na mapie. Z naszej głównej tablicy pobieramy współrzędne gracza i w drugiej tablicy sprawdzamy czy "sąsiadujące" indeksy posiadają obiekty, a jeżeli tak to wtedy możemy wykonać odpowiednie operacje na nich.

W pierwszym sposobie minusem jest fakt, iż przeszukujemy całą tablice, nawet jeżeli dany przedmiot czy wróg jest na drugim końcu mapy, a w drugim natomiast musimy poświęcić miejsce na drugą tablice, którą dodatkowe trzeba będzie uaktualniać za każdym przemieszczeniem się gracza czy wrogów (czy przedmiotów, nieistotne).

Zakładam, iż w przypadku jeżeli na mapie jest tylko kilka przedmiotów to pierwsza opcja jest lepsza. Ale co w przypadku jeżeli mamy różne obiekty rzędu 100, 1000, 1000000? Kiedy sposób 1 czy 2 jest lepszy? Może to nie ma znaczenia i lepiej zawsze stosować drugi? Może istnieją o wiele lepsze rozwiązania? Co lepiej jeżeli mapa jest, a co jak bardzo duża? Co jeżeli musimy przeszukać mały obszar w okół gracza, a co jeżeli duży? Co jeżeli obliczamy kolizje za pomocą promienia? Wyszukujemy obiektów w promieniu (załóżmy) 10 jednostek, a obiekt, z którym miałaby wystąpić kolizja znajduje się 11 jednostek dalej, ale jest tak duży promień, że koliduje z pierwszym obiektem?

Problemów i pytań pewnie jest więcej, nie ma sensu się rozdrabniać. Proszę o ogólne porady/opinie/doświadczenia, sposoby na rozwiązanie problemu, link do materiałów, które mogą okazać się przydatne, lub zagadnienia pod którym mogę szukać informacji

Podobne pytania

0 głosów
0 odpowiedzi 256 wizyt
pytanie zadane 28 listopada 2020 w C i C++ przez Mateusz1223 Bywalec (2,440 p.)
0 głosów
1 odpowiedź 1,117 wizyt
pytanie zadane 22 października 2019 w C# przez niezalogowany
0 głosów
1 odpowiedź 254 wizyt
pytanie zadane 19 grudnia 2018 w C i C++ przez Patryk_04 Nowicjusz (230 p.)

93,444 zapytań

142,436 odpowiedzi

322,698 komentarzy

62,806 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...