0

これは、頭では簡単に捉えられますが、言葉で説明するのが難しい問題です。以下の説明が明確でない場合はお知らせください。

ユーザーが 2D サーフェスに描画しているとしましょう。マウスやスタイラスなどで曲線を描いています。定義を明確にするために、曲線は始点 (スタイラスが最初に置かれた点)、中間点 (スタイラスがドラッグされた点)、および終点 (ユーザーがスタイラスを表面から持ち上げる最終ポイント)。

ユーザー曲線が閉じた形状を作成しているかどうかを検出するにはどうすればよいですか? たとえば、目をぼかして下の図を見ると (「.」は曲線上の点を示し、「0」は曲線上にない点を示します)、最初の図は閉じた空間を作成しますが、2 番目の図は作成しません。 .

0000000000000000
0000..0000000000
000.00.000000000
00.000.000000000
00.00.0000000000
000...0000000000
0000000000000000

000.000000000000
0000.00000000000
00000.0000000000
00000...00000000
0000000.00000000
00000000.0000000
0000000000000000

さらに、ある点 (x1,y1) が与えられた場合、その点が囲まれた空間の内側にあるか外側にあるかをどのように判断できますか?

4

3 に答える 3

1

2番目の質問:

従来のアプローチは、x1、y1から画面の端まで線を引き、その線がポリゴンと交差する回数を確認することです。数が奇数の場合は形状の内側、偶数の場合は外側です。アプローチとシングルポイントエッジには問題がありますが、オンラインで解決策/修正を見つけることができると確信しています。

于 2010-12-06T21:35:53.833 に答える
1

私は Assaf に +1 を与えましたが、別の方法として、フラッド フィリングを行ってから、元の色でポイントが残っているかどうかを確認します。ベクター アートワークの場合、線の交差をカウントする方がおそらく簡単です。

于 2010-12-06T21:51:06.580 に答える
0

1)パスがループを形成しているかどうかを検出するには、ポイントをグラフに変換できます。どのポイントがエッジで接続されているかを判断するには、独自のヒューリスティックを定義する必要があります (たとえば、隣接するすべてのポイントをエッジで接続するように定義できます。または、ポイントが特定の順序で生成される場合、連続するポイントエッジで接続できます)。グラフを作成したら、サイクル検出アルゴリズムをグーグルで検索して、ループが発生しているかどうかを確認できます。

2) どの点が囲まれているかを判断するには、ループを構成する点を取得し、それらを使用して多角形を定義します。次に、「ポリゴン内のポイント」アルゴリズムをグーグルで検索し、特定の範囲内のすべてのポイントをテストします。

于 2010-12-06T21:30:17.837 に答える