Próbuję zaimplementować algorytm linii wzroku na dwuwymiarowej siatce. Wiem, jak to musi działać koncepcyjnie, ale nie mogę myśleć o tym, jak zaimplementować go jako algorytm.Jak znaleźć wszystkie kwadraty siatki na linii?
Podstawowy pomysł jest dość prosty. W pseudokodzie:
function LineOfSight(point1, point2): boolean
squares = GetListOfSquaresOnLine(point1, point2)
for each square in squares
if square.IsOpaque then return false
return true
GetListOfSquaresOnLine
że (koncepcyjnie) narysować linię prostą z centrum kwadratu siatki, punktem 1 do centrum kwadratu siatki, punktem2 i zwraca się wszystkie kwadraty, że oś przechodzi przez . Ale to jest część, której nie mam pojęcia, jak ją wprowadzić. Czy ktoś wie, jak to zrobić? Przykłady Delphi lub C są preferowane, ale nie są wymagane.
Dzięki! Linia supercover jest lepiej dopasowana niż podstawowa linia Bresenham. Przełączam to na akceptowaną odpowiedź. –
Ten obraz ma kwadraty, które _ są_ na linii, ale nie są podświetlone. Dlaczego to? --- Edytuj: Teraz rozumiem. Oto link, który modyfikuje algorytm, aby uzyskać supercover http://eugen.dedu.free.fr/projects/bresenham/. – byxor