如何将负多边形与内部负多边形连接?

时间:2012-12-05 16:14:42

标签: c++ boost polygon

我目前正在开发一个私有项目,它依赖于使用Boost C ++库对多边形的一些操作。

我目前正在尝试使用内部多边形/负多边形概念。

我现在需要做的是连接三个多边形,其中两个具有正(逆时针)外多边形和负(顺时针)内多边形。

第三个是负多边形,一个具有负面积的新多边形对象 - 顺时针方向的点。这就是我不能完全确定如何处理这种情况的地方。

这是这三个多边形的图片。连接左上多边形和右下多边形的中间是负面多边形。

Polygons including the negative one

现在我想做的是通过union函数连接所有三个多边形。 我期望联盟做的是切掉多边形1和3的正面部分(正多边形)并返回剩余的两个多边形1和3。

我实际得到的是我的多边形1和3未触及,因为没有负多边形2。

任何帮助将不胜感激。

编辑:

我需要得到的是一个矢量而不是位图或图片或其他什么。 这些图片仅用于更好地可视化我拥有的和我需要的东西。

这三个多边形实际上不超过x和y点的向量。

以下是我希望所有三个多边形结合的正确结果的图片:

Edit2:更正了结果

Result

2 个答案:

答案 0 :(得分:0)

您希望工会如何工作? Usually a union of polygons 1 and 2 would result in polygon 3,但是对于您的用例,我怀疑您希望它生成多边形4。如果是这种情况,您可以简单地对所有顺时针路径进行合并,然后对逆时针路径进行合并,然后采用前者与后者的区别。如果您希望联合产生多边形3,那么我认为没有一致的方法可以执行所需的操作。

答案 1 :(得分:-1)

好的计划是将你的多边形视为一个位图(布尔值): 每个多边形都是blit到(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;
};