2

だから私は Java コースの紹介のプロジェクトを行っていますが、私ができることをはるかに超えたものを選んだようです。:P
どんな助けでも大歓迎です。これは私が問題を抱えているものです:

プレーヤーによって制御されるカーソル (前進または 90° 回転) があり、進むにつれて色付きの線が残ります。独自の線を越えて任意の形状の多角形を閉じることができた場合 (直角のみ)、その表面の色が線の色に変わります。

この状況がいつ発生したかを検出できますが、閉じたばかりの正しいポリゴンを実際に塗りつぶす方法がわかりません。可能なすべてのケースをカバーするアルゴリズムを想像できないようです。

スキャンライン塗りつぶしアルゴリズムを調べましたが、マップに既にいくつかのポリゴンが塗りつぶされているときまでに問題が発生し始めると思います。ポリゴン内のポイントを見つける方法があれば、Floodfillアルゴリズムは完璧ですが、さまざまな可能性があるため、これに関する一般的なルールは思いつきません。

各色が数値で表される整数の配列 2x2 を使用しています。

この問題にアプローチする方法について誰か考えがありますか?

4

2 に答える 2

1

状況を検出できれば、これは非常に簡単な方法で解決できます。問題は、フラッドフィルの開始点としてどの点を選択するかです。簡単な答えは、すべて試してみることです。もちろん、カーソルが置かれているポイントに隣接するポイントからのみ開始することは理にかなっています。この場合、チェックするポイントは最大 8 つです。さらに良いことに、現在のポイントがポリゴンを形成している場合、それらのうち少なくとも 2 つは確実に既にペイントされています。

ということで、チェックポイントは8つ。これらの各ポイントから開始して、フラッドフィルを 8 回起動します。

おそらく心に留めておくべき2つのこと:

  1. Floodfill でポリゴンが見つからない場合に元に戻すには、フィールドの複製バージョンで領域を埋めてみてください。

  2. Floodfill を 2 回目以降に起動する場合は、このクローン バージョンのフィールドを再利用して、そこに入力されているかどうかを確認する必要があります。これにより、すべてのポイントを最大 1 回チェックできるようになり、8 回のフラッドフィルが 1 回のフラッドフィルとほぼ同じ速さになります。

于 2013-03-20T13:55:28.360 に答える
0

Graphics2 と Polygon を使用して任意のポリゴンを塗りつぶして、この質問を確認してください: java swing: Polygon fill color problem

ポイントがポリゴンの内側か外側かを調べる: http://en.wikipedia.org/wiki/Point_in_polygon

ダブルバッファリングを使用していることを確認してください。個々のピクセルを設定し、ダブル バッファリングを使用しない場合、すべてのピクセルが設定された後にコンポーネントが再描画される可能性があります。

于 2013-03-20T14:19:16.703 に答える