从CGAL中的General_polygon\uset_2解析单个曲线



首先,我要感谢迄今为止在我通过CGAL库工作时遇到的问题上为我提供帮助的每一个人,非常感谢。

我自己的背景:我对C++还很陌生,我的编程经验是在MATLAB中,所以有很多概念我学得很快,因此对我来说都很新,所以请原谅我在C++方面可能使用的错误语言。

问题:

我最近写了一些代码,使用通用多边形上的布尔集运算文档中的代码来找到多段线和圆(即多段线的缓冲区(的Minkowski和。

这里,输出中使用了General_polygon_set_2概念,如果使用上面例子中的输出代码,我可以得到Polygon_with_holes_2类的以下输出:

48 [775.718 -206.547 --> 769.134 -157.991] (769 -157 1 1) [769.134 -157.991 --> 770 -157] (769 -157 1 1) [770 -157 --> 768.866 -156.009] [768.866 -156.009 --> 762.282 -107.453] [762.282 -107.453 --> 703.282 -115.453] [703.282 -115.453 --> 708.072 -150.778] ...
7 15 [549.239 -193.612 --> 569.403 -216.422] ... 3 [456.756 -657.812 --> 657.930 908.153] ...

在这里,如果我理解正确的话,第一个整数指的是.outer_boundary()中的顶点数,后面是每个"顶点"的曲线描述;边缘";一般多边形的。在我的问题中,输出将只由线性函数和圆弧组成。

线性:[775.718 -206.547 --> 769.134 -157.991]
圆弧(x单调(:(769 -157 1 1) [769.134 -157.991 --> 770 -157]

线性元素很简单,通过一条线从这个x-y坐标到另一个坐标。至于圆弧,它有点不同,它说使用这些括号()中的自变量描述的这个圆,从这个x-y坐标到这些括号[]中包含的另一个坐标。圆的参数是:(x,y,半径,方向(。

接下来,由于我们有孔,在.outer_boundary()被写出之后,将显示另外两个整数。第一个表示孔的数量,第二个表示该孔中的顶点数量,然后是该孔的顶点。然后,一旦写出该孔,就会写出另一个整数来描述该孔中的顶点数量,然后对所有孔继续这样做,完成多边形的描述。

因此,我目前的问题是一次解析出每个单独的曲线,这样我就可以对它们进行操作。

我在文档中有以下功能可供使用:

.outer_boundary():返回表示外部边界的一般多边形。.holes_begin():返回孔的起始迭代器。.holes_end():

所以我的想法是把General_polygon_set_2分解为General_polygon_2,然后分解成.outer_boundary()和不同的洞。最后,对于每一组曲线,将它们分解为单独的曲线。

我真的不知道该怎么做,我只知道我需要单独的曲线数据,这样我就可以对它们进行自己的操作。如有任何帮助,我们将一如既往地不胜感激!

注意:实际上,我在阅读了安排文档后删除了这篇帖子,认为这是一个太明显的答案,但过了一段时间,我仍然不知道如何正确获取这些信息,我认为最大的问题是我缺乏C++知识。很抱歉这是个愚蠢的问题。

正在进行的解决方案:

list<Polygon_with_holes_2> res;
S.polygons_with_holes (back_inserter (res));
list<Polygon_with_holes_2>::iterator i = res.begin();
Polygon_with_holes_2 mink = *i;
minkOuter = mink.outer_boundary();
cout << minkOuter << endl;
int numHoles = mink.holes_end()-mink.holes_begin();
cout << numHoles << endl;

现在我正在隔离这些洞,然后把它们分解成每个单独的曲线。

这里的文档声明Hole_const_iterator的value_type是General_polygon_2,这意味着您可以遍历所有";曲线";使用";holes_begin(("以及";孔端";,就像你想的那样。要做到这一点,请使用以下语法:

for(auto h_it = mink.holes_begin(); h_it != mink.holes_end(); ++h_it)
{
//in here h_it is an iterator with value type General_polygon_2, so *h_it will be a the polygon describing a hole. Every step of this loop will give you another hole.
}

然后,可以使用curves_begin((和curves_end((以相同的方式迭代每个多边形的曲线。

因此,迭代多边形的每条曲线:

for(auto h_it = mink.holes_begin(); h_it != mink.holes_end(); ++h_it)
{
for(auto curve_it = h_it->curves_begin(); curves_it != h_it->curves_end(); ++curves_it)
{
//*curves_it gives you a curve.
}
}

相关内容

  • 没有找到相关文章

最新更新