すぐに面白い問題が発生しました。アルゴリズムについて考え始めました。私がそれを考えると、賢くなることができない限り、恐ろしいスケール(O(n^4))になるだろうと思うので、私は恐怖を感じます。私はこの問題について賢明になるのに困っている。ここでは、問題の簡単な説明です。ポリゴン間の共有頂点の検索
M個の頂点のリスト(Mは100のオーダー)として格納されているN個のポリゴン(Nは巨大> 10,000,000以上)を持っています。私がする必要があるのは、各ポリゴンが他のポリゴンの中で共有されている頂点のリストを作成することです(ポリゴンを周囲の関心領域、時にはリージョン同士を考えて考える)。私は、これは、多角形1で頂点1は、ポリゴン2の頂点2と同じポイントであり、ポリゴン1の頂点2は、ポリゴン2の頂点3と同じポイント同様に頂点であることを意味し、この
Polygon i | Vertex | Polygon j | Vertex
1 1 2 2
1 2 2 3
1 5 3 1
1 6 3 2
1 7 3 3
のようなものを参照してくださいポリゴン1の5はポリゴン3の頂点1と同じです....
簡潔にするため、ポリゴンは重複しないこと、最も近いポリゴンはエッジに接していること、すべての頂点は整数であると仮定できます平等をテストしやすくするため)。
ここで私ができることは、各ポリゴンに対して、ポリゴンと頂点のすべてをループして、O(N^2 * M^2)のスケーリングを与える必要があります。私の場合。非常に大きなポリゴンファイルを持つことができるので、すべてをRAMに保存することもできないため、ファイルの複数の読み込みを意味します。ここで
は私の擬似コードは、私は(私はそこに多くの時間を費やすことはありませんので、私は文学を知らない)、これは、グラフィックスコミュニティに来ていることを仮定しているこれまでのところ
for i=1 to N
Pi=Polygon(i)
for j = i+1 to N
Pj=Polygon(j)
for ii=1 to Pi.VertexCount()
Vi=Pi.Vertex(ii)
for jj=1 to Pj.VertexCount()
Vj=Pj.Vertex(jj)
if (Vi==Vj) AddToList(i,ii,j,jj)
end for
end for
end for
end for
です。何か案は?
これは2Dのみです。 – miked