Saya pikir gambar Anda sedikit menyesatkan karena Anda memilih untuk menggambar garis dari titik pada lingkaran yang bersinggungan dengan arah bergerak Anda. Saya bisa melihat bahwa tabrakan ke tepi kisi Anda bahagia ketika titik TOP dan LEFT dari lingkaran Anda menyentuh tepi.
Biarkan C menjadi pusat Anda dan r jari-jari sehingga P ' = C + ( r , 0) dan P " = C + (0, r).
Jika D adalah vektor arah Anda (versor), Anda memiliki dua baris:
R '= D · t + P' ,
R "= D · t + P"
Anda harus menemukan persimpangan garis-garis tersebut dengan garis persamaan:
y = i dan y = i yang merupakan tepi dari grid Anda!
Solusinya mudah karena Anda hanya perlu mempertimbangkan komponen x atau y dari R 'dan R ". Anda akan menemukan t untuk setiap bagian, dan poin untuk thoose t , cukup urutkan titik tersebut dengan t dan Anda sudah selesai.
Saya percaya Anda dapat dengan mudah mengatakan sel apa yang dipukul jika Anda tahu titik persimpangan.
Ini berfungsi jika r <1 (lebar dan tinggi sel).
Ini bekerja juga untuk kasus-kasus lain hanya melakukan beberapa pertimbangan P ' dan P " . Kami memilih TOP dan KIRI karena arah, BOTTOM dan KANAN harus dipertimbangkan untuk arah yang berlawanan, Anda mengerti mengapa.
Sekarang lihat gambar ini:
Lingkaran lebih besar dari satu sel dan kami mengira itu akan arah yang sama dengan gambar Anda. P1 adalah titik pertama yang akan menyentuh, P2 adalah yang kedua, P3 tidak berguna karena berada di bagian bawah. Yang perlu Anda lakukan adalah melempar sinar dari P1 dan P2 seperti yang kita lihat sebelumnya dan melakukan hal yang sama untuk garis vertikal.
Secara umum Anda akan memiliki titik awal lainnya bersama dengan TOP dan yang KIRI dari mana menembakkan sinar Anda, semakin besar lingkaran Anda, semakin banyak sinar yang harus dilemparkan.
Sejujurnya beberapa Anda dapat menghindari untuk menembak semua sinar melakukan pertimbangan geometris, tetapi itu dapat membuat hal-hal lebih sulit untuk dipahami.