実現したいこと
(X, Y)の座標点を複数含んだ閉領域が存在している状況で、閉領域同士が接している際に、双方の領域をマージしたいです。
また、マージ後の領域について、外形を示す形状座標点を取得できるようにしたいです。
前提
Pythonで解析用の領域を管理させるシステムを開発中です。
ユーザーの都合上、同じ条件の領域を複数構築して、それを結合させることで大きな領域を定義させたいと考えています。(詳細は伏せさせてください)
当初、単純に線分の一致、ベクトル等を考慮して判断させようかと考えていたのですが、線分が接するけど両者の長さが異なる例などが多々あり、単純に処理ができない状況です。
プログラミング初学者につき、検討がつかないので質問させていただいた次第です。エラーではなく、計算のアルゴリズム等についてなのですが、アドバイスいただけますと幸いです。
例:対象としている閉領域の座標点(X, Y)
領域1: (10,0)(10,10)(20,10)(20,15)(25,15)(25,5)(30,5)(30,0) 領域2: (5,25)(25,25)(25,15)(20,15)(20,10)(15,10)(15,20)(5,20)
例:出力したいマージ後の形状座標点
(5,25)(25,25)(25,5)(30,5)(30,0)(10,0)(10,10)(15,10)(15,20)(5,20)
処理概要と出力イメージ
ここでの質問は
(25,15)(25,5) と (25,25)(25,15) が接している部分だ、というのを「発見する」部分では不要で
発見後の処理のみですか?

> 閉領域同士が接している
斜め同士はありなのか隣同士だけなのか等、図示イメージがあった方が回答が得やすいです。
後は画像処理系をPythonでやろうとするとOpenCVやScipyあたりが相性が良いと思います。イメージ的にはちょっと変な形(縦横だけなのかななめもありなのかで変わるはずです)のカーネルでモルフォロジー変換をすればいけそうな気がします。
ご回答ありがとうございます。
処理内容としては「発見する」部分も悩みどころでして、長さは違うけど一直線上に存在する線分同士をどう判定させるのか等について悩んでいます。
やはりここは座標点の情報から計算させるのではなくて画像処理を活用するのが得策なのでしょうか
領域の線分は水平垂直のみですか?
例では領域は接しているもののみですが、領域の重なりを考慮する必要がありますか?
TakaiYさんのコメントは「発見する」部分に関してですね?
ですと YuYHさんも一つ、
同じ座標かどうか の判断では 実数の微妙な差は気にせず 数値1==数値2 で比べて良いのか、「ある誤差範囲なら同じ」と見るべきなのか。微妙な差で 重なったりすき間があいたり する可能性が在るので。
例を見た感じだと「接している(重なってはいない)」ならば,「一方の図形の頂点が他方の図形の辺上にある」っていう形になりますよね.
で,図形の定義をグラフだと見たとき,そういう頂点を全組み合わせチェックででもして探せば,グラフを1つにすることはできますよね.
で,「外周を辿る」とき,分岐点(「そういう頂点」のところ)ではどっちに行けばいいのか?っていうと,「今来た方向から見てどっち側の方向に辿れば良いのか」っていう話がありますよね.(右回りとか左回りとか)
…っていう感じでやれませんかね.結果として辿らなかった場所が「接した部分」になります.
(あー,でもこんなのだとマージ結果として穴ができる下側の例を扱えないか.辿らなかった部分グラフがループになってるか?とか,あるいはその中の頂点に「そういう」じゃないやつがいないか? とかそういうチェックをして穴に対処する必要がありそう.)
たどったところを消して新しい 道筋に登録していく、結果 消し残りが 接しているか穴。ということで後処理で出来ないかな

回答3件
あなたの回答
tips
プレビュー