Penso che il tuo disegno sia un po 'fuorviante perché hai scelto di tracciare tratti dal punto del cerchio tangente alla tua direzione di movimento. Vedo che le collisioni ai bordi della griglia si verificano quando i punti TOP e LEFT del cerchio toccano un bordo.
Lascia che C sia il tuo centro e r il raggio in modo che P ' = C + ( r , 0) e P " = C + (0, r).
Se D è il tuo vettore di direzione (il verso) hai due linee:
R '= D · t + P' ,
R "= D · t + P"
Devi semplicemente trovare l'intersezione di quelle linee con le linee dell'equazione:
y = i e y = i che sono i bordi della griglia!
La soluzione sono facile, perché bisogna considerare semplicemente il xo la componente y di R' e R". Troverete il t valore di s per ogni insersection, ed i punti per thoose t s, semplicemente sorta coloro punto per t e si sono fatti.
Credo che puoi facilmente dire quale cella viene colpita se conosci il punto di intersezione.
Funziona se r <1 (la larghezza e l'altezza della cella).
Funziona anche per gli altri casi semplicemente prendendo in considerazione P ' e P " . Scegliamo TOP e LEFT a causa della direzione, BOTTOM e RIGHT dovrebbero essere considerati per la direzione opposta, capisci perché.
Ora guarda questa immagine:
Il cerchio è più grande di una singola cella e supponiamo che stia andando nella stessa direzione del tuo disegno. P1 è il primo punto che toccherà, P2 è il secondo, P3 è inutile perché è nella metà inferiore. Quello che devi fare è proiettare i raggi da P1 e P2 come abbiamo visto prima e fare lo stesso per le linee verticali.
In generale avrai altri punti di partenza insieme a quelli TOP e LEFT da dove sparano i tuoi raggi, più grande è il tuo cerchio, più raggi da lanciare.
Ad essere sincero, puoi evitare di sparare a tutti quei raggi facendo qualche considerazione geometrica, ma ciò può rendere le cose più difficili da capire.