ランダム2Dライン間のスペース充填


23

ランダムに線で満たされた領域(2D)を考えます(図の後)。ある方法で4つの境界エッジを含む行間の空スペースを埋めることに興味があります。

0-区画のサイズを最大化します。
1-充填区画の形状は、水平または垂直に配置された正方形です。
2-充填パーセルの形状は正方形、つまり緩和された配置です。
3- 充填区画の形状は任意の四角形です。 私たちの元の質問

したがって、現時点では3つの異なるシナリオがあります。線は実数の点集合の形式であることに
注意してください[x1,y1,x2,y2]

[* * *] 可能な解決策/アルゴリズム/コードスニペットなどのアイデアは大歓迎です。

ここに画像の説明を入力してください


更新1:私たちは、最初のケースのためのソリューションを管理することができ:
ここに画像の説明を入力してください
手順は:
1-
2-ビットマップにラインをラスタライズは
3-最大にするために、目的関数を用いて所望の色(すなわち、同じ色)の各セルのために近くのセルを検索します面積、つまりセルの数。

それはうまく機能しますが、最初のシナリオのみをカバーし、遅いです。


更新2:
読者は空間充填タイルの概念に精通していると想定しました。インスピレーションを得るためにリンクをたどることができます。ただし、問題は異なることに注意してください。空のスペースをランダムに埋めたり、サイズをランダムに選択したりしないためです。ソリューションは反復的でなければなりません。すべてのケースで、取り付けられる小包の数に制限はありません。実際、たとえば区画の最小領域を選択することにより、反復回数を制限するのはユーザー次第です。これは、指定されたサイズのピクセルに行を離散化した上記の例で明らかです。つまり、基準は、たとえば区画の最大面積など、空の領域全体が満たされるまで実行する必要があります。


更新3:
要約:
1つのアプリケーションは、ひどく破損した「鉱山」で抽出可能な無傷の「岩」ブロックの分布を調べることです。これは、などの掘削の設計、財務評価を含む多くの側面のために非常に役立つことができ
説明:
装飾岩(石)価格は長方形の立方体としてカットし、完全な岩のブロックされている製品の鉱山のための大きさに密接に依存していますブロック。残りの部品の量が可能な限り少ない場合、適切な領域からのブロックの抽出、つまり大きな骨折のないことが望まれます。通常、小さな岩片は比較的経済的価値がなく、廃棄物と見なされます。
この投稿の質問は、この種の問題の解決策を調査しています。

問題の数学的な見方は次のように言えます
。2D:特定の2D領域から抽出できるすべての長方形を見つけ、いくつかの線をできるだけ大きな長方形サイズに最適化します。
3D:可能な限り大きなブロックサイズに最適化されたいくつかのサブプレーン(より良い:ポリゴン)を使用して、特定の3D領域から抽出できるすべての長方形キューブを見つけます。


これは進行中の研究の一部であるため、以下のコメントで尋ねられる質問の一部には、提供できる特定の回答がありません。ここで提供された情報は、問題の全体像を把握するのに十分であると考えています。それでも、コミュニティの利益のためにできる限り詳細を提供します。
最終的な質問の解決策にいくつかの制限を加えることができますが、後でさらに追加することは常に可能であると考えています。たとえば、次のとおりです。{2Dケース}
上記の条件下で抽出されるブロックの最適なサイズ(経済的に最適な長方形)は、この例の領域に対して1x1 m指定さ10x10 mれます。これは、経済的価値に基づいて定義される1つの制約です。切断などの最小実行可能サイズは、0.15x0.15 m; したがって、これは2番目のサイズ制限です。
ここに画像の説明を入力してください
上の図は、ブロックサイズに応じた経済価値関数を示しています。そのため、この特定のケースでは、すべての岩片0.15x0.15 mは単なる無駄です。1.7x1.7 m操作の制限により、ブロックサイズは大きくなりません。


3
@RK-私は同意しません。S /彼はすでに彼らが探しているものを非常に明確に述べています。確かに複数の可能な解決策がありますが、それらすべてが有用で投票されることを止めるものはありません。
GIS-ジョナサン

1
これは非常に数学的に重いかもしれないアルゴリズムの質問なので、試してみてください-math.stackexchange.com
GIS-ジョナサン

1
密接に関連:gis.stackexchange.com/questions/27303を。現在の質問は、@ RKが指摘しているように、十分に適切に提示されていないため、明確な答えはありません。どのように多くの長方形を許可されていますか?「サイズを最大化する」とはどういう意味ですか?また、これは「ランダムなタイリング」の問題ではないことに注意してください。線は、補完することで占有できる領域を決定するだけです。解決策は間違いなくランダムでありません。また、簡単な簡略化がすぐに利用できることに注意してください。問題は補数の各コンポーネント内で個別に解決できます。
whuber

1
@whuber:私たちが興味を持っているアプリケーションの1つは、ひどく破損した「鉱山」で抽出可能な無傷の「岩」ブロックの分布を調べることです。GISはこの問題に対して有望であると思われます。これも質問に追加しました。GISコミュニティは、関連する他の特定の問題のアイデアから利益を得る可能性があります。とにかく、それを移行するかどうかはあなた次第です;)
開発者

4
@whuberが示唆しているように、これは実際にはGISの質問ではありません(ここで質問されたことに腹を立てることはありませんが)。
-Llaves

回答:


2

FME(Safe Software製)を使用して、大きなブロックから小さなブロックまで繰り返し作業する方法を考えています。記録のために、私は彼らのために働いていませんが、彼らのツールを十分に賞賛しているようです...

  1. 関心のある領域で「BoundingBoxReplacer」を使用します。
  2. それをローカル座標系に再投影します(後でフィート/メートル単位で「タイル化」する必要がある場合)。
  3. 「Bufferer」トランスフォーマーで行をバッファします。必要なサイズは、たとえば.01フィート/メートルだけです。ここで探しているのは、次のステップのための線の多角形です。
  4. 「瓦職人」変圧器を追加します。フィートまたはメートルで大きな(推定またはそれ以外の)タイルサイズを指定します。ここで行っているのは、関心のある領域を正方形のブロックにタイル張りすることです。データセットによっては、大規模な異常値を実際に取得するために大規模に開始します。
  5. 「クリッパー」トランスフォーマーを追加します。ここで行っているのは、基本的にデータセットをスライスして、どのタイルが良いか悪いかを確認することです。出力では、「内側」のタイルが大きすぎます。ただし、「外側」のタイルは十分に大きく、切断する準備ができています...
  6. 複雑になりますが、難しくはありません...元のBoundingBoxを再利用するようにトランスフォーマーをループしますが、既にカットの準備ができている領域を切り取ります。そのため、クリッパーを追加し、クリッパーを以前のクリッパー出力の「出力」タイルとしてルーティングします。これで、再び動作する準備ができた単一のポリゴンができました。
  7. タイラーを再度使用します。今回はより小さいタイルを指定します。たとえば、以前に100メートルのタイルを使用した場合は、90メートルを試してください。
  8. 別のクリッパーを追加します。入力クリッパーはバッファー行で、入力クリッピーは入力として小さいタイルです。

毎回小さいタイルを使用して、必要な回数すすぎ、繰り返します。1つのアプローチとして使用するワークベンチの開始点を添付しました。

(かなり詳細な)説明に基づいて、現時点ではオプション1でのみ機能します。まだあまり時間をかけずに。

とにかく、これは少なくとももみ殻から小麦を取り除くための最初のアプローチにすぎません。

FMEタイルの例

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.