0

線が多角形と交差するかどうかを判断する式を見つけようとしています。試してみましたが、以下のコードが正しく動作しません。

bool Check_Collision(float x1,float y1, float x2, float y2)
{
        int j=MyPolyVector.size()-1;
        for (int i=0;i<MyPolyVector.size();i++)
        {
                float x3=MyPolyVector[i].X;
                float x4=MyPolyVector[j].X;
                float y3=MyPolyVector[i].Y;
                float y4=MyPolyVector[j].Y;

                float denom= ((y4-y3)*(x2-x1))-((x4-x3)*(y2-y1));
                float ua = (((x4-x3)*(y1-y3))-((y4-y3)*(x1-x3)))/denom;
                float ub = (((x2-x1)*(y1-y3))-((y2-y1)*(x1-x3)))/denom;
                j=i;

                if(ua >= 0.0f && ua <= 1.0f && ub >= 0.0f && ub <= 1.0f) return true;
        }
        return false;
}
4

3 に答える 3

2

ノウハウを得るために、このリンクはあなたにとって興味深いかもしれないと思います: Point in Polygon Problem

Cコード用のリンクされたリソースもあります: Point in Polygon - C Code

この問題は主に OpenGL コンテキストで処理され、これを解決するための主なアイデアは、チェックするポイントを通過するポリゴンと直線の交点を数えることです。

ポイントがポリゴン内にあるかどうかにかかわらず、どのくらいのジオメトリをチェックする必要がありますか?

PS: この問題に関するこの投稿を見つけました :-) Stackoverflow - Point in Polygon

于 2012-04-07T12:14:40.480 に答える
0

線の交点の方程式が間違っているようです。ここに正しい式がリストされていると思います。

つまり、この問題への適切なアプローチは、線が多角形のいずれかの線分と交差するかどうかを確認することです。したがって、これをテストするには、ポリゴン エッジの各ラインとのラインの交点を計算します。このポイントがポリゴンのセグメント内にある場合は、交点があります (ポイントが、セグメントの終点)。(そして、これはあなたがやろうとしていることかもしれませんが、説明がないのでわかりにくいです。)

于 2012-04-07T19:07:58.400 に答える
0

この本を見て、計算の前に線と線の交差 2D と範囲チェックを検索することをお勧めします。

また、コードでは、ゼロによる除算のチェックと、逆数の線の寸法と公差についてさらに考慮する必要があります。

于 2012-04-07T12:28:54.120 に答える