ジオメトリクラスで提供されているいくつかの関数を見ていますが、この2つの行の間に交差点があるかどうかをテストする非常に貧弱なコメント付き関数が見つかりました。誰かが私にこの作品の仕組みを説明してもらえますか?私が収集したものから誰かがこの交差テスト関数を説明してください
inline bool LineIntersection2D(Vector2D A,
Vector2D B,
Vector2D C,
Vector2D D)
{
double rTop = (A.y-C.y)*(D.x-C.x)-(A.x-C.x)*(D.y-C.y);
double sTop = (A.y-C.y)*(B.x-A.x)-(A.x-C.x)*(B.y-A.y);
double Bot = (B.x-A.x)*(D.y-C.y)-(B.y-A.y)*(D.x-C.x);
if (Bot == 0)//parallel
{
return false;
}
double invBot = 1.0/Bot;
double r = rTop * invBot;
double s = sTop * invBot;
if((r > 0) && (r < 1) && (s > 0) && (s < 1))
{
//lines intersect
return true;
}
//lines do not intersect
return false;
}
、A及びBは、最初のラインの二点であり、C及びDは、第二の二点です。その後、私は完全に失われています。前もって感謝します!
一般的に、線の交差方程式は理解していますか?この機能ではなく、数学的方程式です。 – Carcigenicate
もし私が必要ならば、私はブラッシュアップするためにGoogleの検索を行うことができます。 –
私はステップ1で、コードとは別の方程式を理解できるようにします。次に、コードをもう一度見て、あなたに何かが合っているかどうかを確認します。 – Carcigenicate