CoreGraphics は凹型ポリゴンをネイティブに処理できるため、問題の主な部分は、塗りつぶされた領域の境界を見つけるための塗りつぶしです。
即席に考えると、単純なアルゴリズムは、エッジ フラグを各セルに関連付けることである可能性があります。そのエッジがポリゴンの外部の一部である場合、エッジ フラグが設定されます。フラグは、その端で交わる 2 つのセルによって共有されます。
任意のセルを選択し、4 つのエッジ フラグすべてを設定します。他のすべてのセルのエッジ フラグをリセットします。次に、セルごとに次の再帰的メソッドを記述します。
- 各エッジ フラグが設定されているかどうかを順番にテストします。
- フラグが設定されている場合は、そのエッジを共有するセルが同じ色かどうかを確認します。
- そうである場合、そのセルのエッジ フラグを反転し、再帰します。
反転は、「隣接していることがわかっているセルに接続し、まだ見ていないセルに隣接するエッジを境界の一部に設定する」と言っているのと同じです。
再帰は何百もの項目を深くする可能性があるため、実装の問題として、再帰ではなく、考慮すべきセルのリストを保持してそのリストに追加する価値があるかもしれません。セルにアクセスする順序は重要ではないため、結果は同じになります。
訪問するセルがなくなったら、フラグが設定されたエッジから境界全体を歩き回って、境界全体を再構築できます。黄色と緑のセルが 4 番目と 5 番目の列の間で接触する場所のように、セルの対角線上の会合に到達したときに、わずかに複雑になるだけです。現在のエッジから、頂点と正しい色のセルの両方を共有する次のエッジに移動するロジックを適用する必要があります。