Myślę, że twój rysunek jest trochę mylący, ponieważ wybierasz rysowanie pociągnięć od punktu na okręgu stycznego do twojego kierunku ruchu. Widzę, że zderzenia z krawędziami siatki zdarzają się, gdy TOP i LEWE punkty twojego okręgu dotykają krawędzi.
Niech C będzie twoim środkiem ir promieniem, więc P ' = C + ( r , 0) i P " = C + (0, r).
Jeśli D jest wektorem kierunku (versor), masz dwie linie:
R '= D · t + P' ,
R "= D · t + P"
Po prostu musisz znaleźć przecięcie tych linii z liniami równania:
y = i y = i, które są krawędziami twojej siatki!
Rozwiązanie jest łatwe, ponieważ musisz po prostu wziąć pod uwagę składową x lub y R 'i R ". Znajdziesz wartość t s dla każdego wstawienia, a punkty dla tych ts , po prostu posortuj te punkty według t, a ty są skończone.
Wierzę, że możesz łatwo powiedzieć, która komórka jest trafiona, jeśli znasz punkt przecięcia.
Działa to, jeśli r <1 (szerokość i wysokość komórki).
Działa to również w innych przypadkach, po prostu biorąc pod uwagę P i P " . Wybieramy GÓRA i LEWO ze względu na kierunek, DOLNĄ i PRAWĄ należy brać pod uwagę w przeciwnym kierunku, rozumiesz dlaczego.
Teraz spójrz na ten obraz:
Okrąg jest większy niż pojedyncza komórka i przypuszczamy, że zmierza w tym samym kierunku, co rysunek. P1 to pierwszy punkt, który się dotknie, P2 to drugi, P3 jest bezużyteczny, ponieważ znajduje się w dolnej połowie. Musisz tylko rzucić promienie z P1 i P2, jak widzieliśmy wcześniej, i zrobić to samo dla linii pionowych.
Ogólnie rzecz biorąc, będziesz mieć inne punkty początkowe oraz TOP i LEWE, z których strzelasz promieniami, im większy jest twój okrąg, tym więcej promieni rzucasz.
Szczerze mówiąc, można uniknąć strzelania do wszystkich promieni z uwzględnieniem geometrii, ale może to utrudnić zrozumienie.