C をバウンディング ボックスの中心とし、P をセグメントのもう一方の端点とします。V = (Vx, Vy) = P - C を C から P を指すベクトルとします。
バウンディング ボックスの高さ = 2 * H、幅 = 2 * W とします。W と H は通常の高さと幅の半分であり、以下の計算が簡単になります。
考え方は次のとおりです。V が最初の象限にあり、Vx > 0 および Vy > 0 である場合を考えてみましょう。セグメントは、上側または右側と交差します。V の傾きと、ボックスの中心から右上隅までのセグメントの傾きを比較することで、どちらであるかがわかります。傾斜が大きい場合は上部と交差し、そうでない場合は側面と交差します。
したがって、V が第 1 象限にあり、Vy / Vx > H / W の場合、セグメントは上部と交差します。Vy / Vx < H / Wの場合、辺と交差します。それらが等しい場合、コーナーと交差します。
交差する辺がわかったら、相似三角形を使用して交点を計算できます。点 I = (Ix, H) で頂点と交差する場合、Vx / Vy = Ix / H または Ix = H * Vx / Vy となります。点 I = (W, Iy) で辺と交差する場合、Vy / Vx = Iy / W または Iy = W * Vy / Vx となります。
他の象限でも同じ方法が機能します。Vx と Vy の兆候を追跡する必要があるだけです。戻り値が sign(Ix) == sign(Vx) および sign(Iy) == sign(Vy) を満たすことをアサートすることで、作業が少し楽になります。
また、符号に注意すれば、除算を避けることができます。Vy / Vx > H / W は、Vx > 0 と仮定して、Vy * W > Vx * H と同等です。