4

私は現在、BoostC++ライブラリを使用したポリゴンの一部の操作に依存するプライベートプロジェクトに取り組んでいます。

私は現在、内側のポリゴン/負のポリゴンの概念を使用しようとしています。

ここで行う必要があるのは、3つのポリゴンを結合することです。そのうちの2つには、正(反時計回り)の外側のポリゴンと負(時計回り)の内側のポリゴンがあります。

3つ目は、負のポリゴンで、負の領域を持つ新しいポリゴンオブジェクトです。時計回りの方向を指します。そして、これは私が状況をどのように処理するか完全にわからない点です。

これらの3つのポリゴンの写真を次に示します。左上のポリゴンと右下のポリゴンを結ぶ真ん中のポリゴンが負のポリゴンです。

負のポリゴンを含むポリゴン

ここで、ユニオン関数を使用して3つのポリゴンすべてを結合します。ユニオンに期待するのは、ポリゴン1と3の正の部分(正のポリゴン)を切り取り、1と3の残りの2つのポリゴンを返すことです。

実際に取得するのは、負のポリゴン2がないため、ポリゴン1と3はそのままです。

どんな助けでもありがたいです。

編集:

私が取得する必要があるのは、ビットマップや画像などではなく、ベクトルです。これらの写真は、私が持っているものと必要なものをよりよく視覚化するために使用されています。

これらの3つのポリゴンは、実際にはx点とy点のベクトルにすぎません。

これは、3つのポリゴンすべての結合の正しい結果であると私が期待するものの写真です。

Edit2:結果を修正しました

結果

4

2 に答える 2

-1

ポリゴンを(ブール値の)ビットマップと見なすのが適切な計画です。すべてのポリゴンは、タイプ(R、R)->boolのビットマップにブリットされます。ビットマップ形式になると、負のポリゴンはブール値に対する操作ではなく、単なる操作になります。

class Bitmap { virtual bool Map(float x, float y) const=0; };
class AndNot : public Bitmap {
public:
   AndNot(Bitmap &bm1, Bitmap &bm2) : bm1(bm1), bm2(bm2) { }
   bool Map(float x, float y) const {
      return b1.Map(x,y) && !b2.Map(x,y);
   }
private:
   Bitmap &bm1, &bm2;
};
于 2012-12-05T16:36:31.193 に答える