移動方向に接する円上の点からストロークを描くことを選択するので、あなたの描画は少し誤解を招くと思います。あなたのグリッドのエッジへの衝突は、あなたのサークルのトップと左のポイントがエッジに触れたときに起こっていることがわかります。
ましょCはあなたの中心であるとrは半径ので、P」 = C +(R、0)とP」 = C +(0、r)を。
場合はDがあなたの方向ベクトル(ベルソル)で次の2つのラインを持っています:
R '= D・t + P'、
R "= D・t + P"
これらの線と方程式の線との交点を見つける必要があります。
y = iとy = i がグリッドのエッジです!
解決策は、あなたが見つけるでしょう。あなたは、単にxまたはRのYコンポーネント」とR」を考慮しなければならないので簡単ですトン各insersectionのための値を、そしてthooseのためのポイントトンによるS、単にソートそれらのポイントトンとあなた完了しました。
交点が分かれば、どのセルがヒットしたか簡単に言えると思います。
これは、r <1(セルの幅と高さ)の場合に機能します。
P 'とP "について検討するだけで、他のケースでも機能します。TOPとLEFTを選択するのは、方向が異なるためです。BOTTOMとRIGHTは、反対方向と見なす必要があります。その理由を理解してください。
今、この画像を見てください:
円は単一のセルよりも大きく、描画と同じ方向に進んでいると考えられます。P1は最初に接触するポイント、P2は2番目、P3は下半分にあるため役に立たない。あなたがする必要があるのは、前に見たようにP1とP2から光線を投じて、垂直線に対して同じことをすることです。
一般に、TOPとLEFTに加えて、光線を放つ場所から他の開始点があります。円が大きいほど、照射する光線が多くなります。
正直に言うと、幾何学的な考慮を払ってすべての光線を放つことを避けることができますが、それによって状況がわかりにくくなる可能性があります。