【发布时间】:2021-07-19 14:59:15
【问题描述】:
首先,我要感谢迄今为止帮助我解决我在使用 CGAL 库时遇到的问题的所有人,非常感谢。
我自己的背景:我对 C++ 还是很陌生,我的编码经验是在 MATLAB 中,所以有很多概念我学得很快,因此对我来说很新,所以请原谅我的错误语言可用于 C++。
问题:
我最近编写了一些代码,使用 Boolean Set Operations on General Polygons 文档中的代码找到折线和圆的 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() 中a 顶点的数量,然后是对一般多边形的每个“边”的曲线的描述。在我的问题中,输出将仅包含线性函数和圆弧。
线性:[775.718 -206.547 --> 769.134 -157.991]
圆弧(x-单调):(769 -157 1 1) [769.134 -157.991 --> 770 -157]
线性元素很简单,从这个 x-y 坐标到另一个坐标。至于圆弧,它有点不同,它说使用这些括号() 中的参数描述的这个圆从这个x-y 坐标转到这些括号[] 中包含的另一个坐标。 circle 的参数是:(x,y,radius,orientation)。
接下来,由于我们有孔,在写出.outer_boundary() 之后,又显示了两个整数。第一个说明孔的数量,第二个说明该孔中的顶点数,然后是该孔的那些顶点。然后,一旦写出那个洞,就会写入另一个整数来描述那个洞中的顶点数,然后对所有的洞继续这样,完成对多边形的描述。
因此,我目前的问题是一次解析每条曲线,以便我可以对它们进行操作。
我可以使用documentation 的以下函数:
.outer_boundary():返回代表外边界的一般多边形。
.holes_begin():返回孔的开始迭代器。
.holes_end():
所以我的想法是将General_polygon_set_2 分解为General_polygon_2,然后将其分解为.outer_boundary() 和不同的孔。最后,对于每组曲线,将它们分解为单独的curves。
我不太确定该怎么做,我只知道我需要单独的曲线数据,这样我就可以对它们进行自己的操作。任何帮助,将一如既往,非常感谢!
注意:在阅读了安排文档后,我实际上删除了这篇文章,认为这是一个太明显的答案,但一段时间后我仍然真的不知道如何正确提取这些信息,我认为最大的问题在于我的缺乏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;
现在我正在努力隔离这些孔,然后将它们分解成每条曲线。
【问题讨论】: