8

私はオープンソースの追跡およびジオフェンスソフトウェアアプリケーションに取り組んでおり、ジオフェンスの計算を理解するのに少し苦労しています。

ポリゴンの内側に座標が存在するかどうかを判断する必要があります。ただし、トリッキーな部分は、ポリゴンに設定された数の辺がないことです。50辺または5辺を計算できる必要があります。

私の調査によると、最も簡単な方法は、自分の点(xと呼びます)と多角形の外側の点(yと呼びます)を取り、線((xx、xy)、(yx、yy))がと交差するかどうかを判断することです。ポリゴンの境界。奇数回交差する場合、点xはポリゴンの内側にある必要があります。

ただし、これをアルゴリズムで表現する方法がわからないことを知っています。ポリゴンを構成するさまざまな線をループする必要があることは明らかですが、チェックを行うとわかりません。誰か助けてもらえますか?私は必ずしも解決策を求めているわけではないことをご承知おきください。答えを理解するのに役立つものはすべて、非常に役立ちます。

とても有難い。

4

6 に答える 6

6

こちらをご覧ください

基本的に、光線がポリゴンを構成する線分と交差する回数をカウントするアプローチ(ジョルダン曲線定理だと思います)があります。結果が偶数の場合、ポイントはポリゴンの外側にあり、そうでない場合、ポイントはポリゴンの内側にあります。

HTH

編集ここ で見つけることができるこの質問に関連する別のSO質問があります

于 2010-01-13T20:43:38.003 に答える
1

ここで重要なのは、好きなポイントYを自由に選択できることを理解することです。本当に良い選択はポイント(xx、-infinity)です。つまり、問題のポイントから真下にあり、無限に離れているポイントです。ここで、問題は次のようになります。問題のポイントの下でX座標と交差するポリゴンエッジの数。したがって、X座標にまたがる線分のみを考慮する必要があります。

ポイントがP=(x、y)で、セグメントの終点がP1 =(x1、y1)およびP2 =(x2、y2)の場合、xと交差するセグメントのy座標はsy =(x- x1)*(y2-y1)/(x2-x1)+ y1

sy <yかどうかを確認します(x1<x<x2またはx2<x<x1の場合のみ)。これらの数が奇数の場合、Pは内部にあります。

ポリゴンの頂点の1つが問題のポイントとまったく同じy位置にある場合、これには微妙な問題があります。その場合は注意が必要です。

于 2010-01-13T20:58:56.240 に答える
1

ジャスティン、

セグメントを作成するには、「ポリゴンの外側」をより適切に定義する必要がある場合もあります。

すべてのx座標とy座標の最小値と最大値を取り、長方形(xmin、ymin)、(xmax、ymin)、(xmax、ymax)、(xmin、ymax)を作成します。長方形の外側のポイントは、間違いなくポリゴンの外側になります。次に、他のポイントが上に示したように続行します。各ポリゴンセグメントと作成された線分は、方程式y = ax + bで定義され、各セグメントについて、範囲xloとxhiが定義されます。作成した線分は、範囲内のセグメントと交差するかどうかのどちらかです。つまり、セグメント範囲内の2つの連立方程式の解が存在するかどうかを示します。交差点の数を取得するには、存在するソリューションの数を数えるだけです。

于 2010-01-15T22:52:31.430 に答える
0

これを試して、

public static bool PointinPolygon( Point[] points, Point p )
    {
        bool result = false;

        for( int i = 0; i < points.Length - 1; i++ )
        {
            if( ( ( ( points[ i + 1 ].Y <= p.Y ) && ( p.Y < points[ i ].Y ) ) || ( ( points[ i ].Y <= p.Y ) && ( p.Y < points[ i + 1 ].Y ) ) ) && ( p.X < ( points[ i ].X - points[ i + 1 ].X ) * ( p.Y - points[ i + 1 ].Y ) / ( points[ i ].Y - points[ i + 1 ].Y ) + points[ i + 1 ].X ) )
            {
                result = !result;
            }
        }
        return result;
    }
于 2011-11-20T21:21:59.247 に答える
0

平面(2D)にいると仮定します。

  • 各辺の傾き(ある座標系で)と、点Xから点Yまでの線の傾き(線XY)を計算します。
  • 勾配がXYの勾配と等しくないすべての辺について、交点を計算します。
  • 各点について、交点が線分XYと辺を定義する線分上にあるかどうかを判別します。もしそうなら、あなたはその側を越えました。(交点の座標をチェックし、x成分とy成分の両方が各線分の値の範囲に含まれているかどうかを確認します。)
  • 交差点の数を数えれば、あなたはあなたの答えを持っています。
于 2010-01-13T19:44:30.187 に答える
0

ポリゴンとポイントの回転数を計算します。

于 2010-01-13T20:44:20.247 に答える