A(X, Y)
ポイントから始まり、指定されたポイントまで永遠に続く光線がありB(X, Y) != A
ます。K,L,M,N
それぞれが。を持つ点で定義された長方形があり(X, Y)
ます。
光線が長方形の任意の点と交差するかどうかを検出する方法を知りたいですか(bool
正確な座標ではなく、を取得します)?そのような値を計算するためのアルゴリズムは何ですか?
これをまっすぐにしましょう。あなたはv
方向に向かっていて、(b_x - a_x, b_y - a_y)
で始まるベクトルを持ってい(a_x, a_y)
ます。
ベクトルを考えてみましょうw = (b_y - a_y, a_x - b_x)
。それは最初のものに対して直角です。(ドット積で確認します。)したがって、どのポイントでも、 withのドット積を取り、記号を見ると(p_x, p_y)
、ベクトルのどちら側にあるかを簡単に知ることができます。(p_x - a_x, p_y - a_y)
w
したがって、長方形の4つの角すべてを含む内積を取ります。いずれかが0ドット積を与える場合、それらはベクトル上にあり、符号が変更された場合は交差があり、符号が常に同じである場合は交差はありません。
これには、スイープ ライン アルゴリズムを使用できます。
それほど巧妙ではありませんが、概念的には単純なアプローチです。光線は、辺の少なくとも 1 つと交差する場合にのみ、長方形と交差します。したがって、長方形の各辺について、端点を通る線と線 AB の交点 (ある場合) を見つけます。次に、その交点が長方形の境界上の線分の一部であるかどうか、または外側にあるかどうかを判断するための単純な範囲チェックです。