Я думаю, що ваш малюнок трохи вводить в оману, тому що ви вирішили намалювати штрихи від точки на дотичній колі до вашого рухомого напрямку. Я можу бачити, що зіткнення з краями вашої сітки трапляються тоді, коли вершина та ліва точка вашого кола торкаються краю.
Нехай C - ваш центр, а r радіус, тому P ' = C + ( r , 0) і P " = C + (0, r).
Якщо D - ваш напрямок вектора (у порівнянні), у вас є дві лінії:
R '= D · t + P' ,
R "= D · t + P"
Вам просто потрібно знайти перетин цих прямих з лініями рівняння:
y = i і y = i - це краї вашої сітки!
Рішення просте, тому що ви повинні просто розглянути x або y компонент R 'і R ". Ви знайдете значення t s для кожного вставки, а точки для tose t s, просто сортуйте ці точки за t і ви зроблені.
Я вважаю, що ви можете легко сказати, яка клітина потрапила, якщо знаєте точку перетину.
Це працює, якщо r <1 (ширина та висота комірки).
Він працює і для інших випадків, просто замислюючись про P ' і P " . Ми вибираємо TOP і LEFT через напрямок, BOTTOM і RIGHT слід вважати для протилежного напрямку, ви розумієте, чому.
А тепер подивіться на це зображення:
Коло більше, ніж одна клітинка, і ми припускаємо, що воно йде в тому ж напрямку, що і ваш малюнок. Р1 - перша точка, яка торкнеться, Р2 - друга, Р3 - марна, оскільки знаходиться в нижній половині. Що вам потрібно зробити, це викинути промені від P1 і P2, як ми бачили раніше, і зробити те ж саме для вертикальних ліній.
Як правило, у вас будуть інші вихідні точки разом з ТОП та ЛІВОМИ, звідки стріляти вашими променями, чим більше коло, тим більше променів.
Якщо чесно, то можна уникати зйомки всіх променів, роблячи певний геометричний розгляд, але це може зробити важче зрозуміти.