以下のように格子状の面があり、マス目のいくつかが塗られているとします。
この塗られたマスについて、下図の境界を描く方法を考えます。
まず、塗られたマス目の周囲を時計回りに囲む4本の矢印を考えます。塗られたマス目が隣接していれば、その境界では2本の矢印が逆向きで重なります。このようなペアを消していくと境界だけが残ります。
これを実装すると次のようになります。座標は左方向と下方向を正とし、 (x,y) の位置のマス目は左上が
(x,y) 、右下が (x+1,y+1) の正方形とします。
これで終わりでもいいのですが、つなげられる矢印はつなぎましょう。<path>
のd
は短い方が気持ちがいいですよね。
つなげる処理は境界の矢印リストから1つ取り出して、その終点が始点の矢印を探すようにしました。左折と右折の両方が見つかる場合にどちらを優先するかはあらかじめ決めておきます。この決め方によって、角が接触している場合のつながり方が変わります。
以上です。