Próbuję obliczyć, które kafelki dana jednostka może „zobaczyć”, gdy jest zwrócona w określonym kierunku na mapie kafelków (w określonym zakresie i kącie skierowania). Najprostszym sposobem byłoby narysowanie pewnej liczby płytek na zewnątrz i raycasta na każdą płytkę. Mam jednak nadzieję na coś nieco bardziej wydajnego. Obraz mówi tysiąc słów:
Czerwona kropka to jednostka (która jest skierowana do góry). Moim celem jest obliczenie żółtych płytek. Zielone bloki to ściany (ściany są między płytkami i łatwo sprawdzić, czy można przejść między dwiema płytkami). Niebieska linia przedstawia coś w rodzaju metody „raycasting”, o której mówiłem, ale wolałbym tego nie robić.
EDYCJA: Jednostki mogą być skierowane tylko na północ / południe / wschód / zachód (0, 90, 180 lub 270 stopni), a FoV zawsze wynosi 90 stopni. Powinno uprościć niektóre obliczenia. Myślę, że istnieje jakiś algorytm rekurencyjny / oparty na stosie / oparty na kolejce, ale nie jestem w stanie tego rozgryźć.
Dzięki!
Odpowiedzi:
Tak, znalazłem artykuł badawczy!
Pod względem kosztów obliczeniowych mapowanie cieni wydaje się dość wyraźnym zwycięzcą.
Zastosowany algorytm można znaleźć tutaj, a implementację C # można znaleźć tutaj , odpowiedni bit poniżej.
źródło