在 CGAL 中解析来自 General_polygon_set_2 的单个曲线
Parse Individual Curves from General_polygon_set_2 in CGAL
首先,我要感谢迄今为止在我使用 CGAL 库时遇到的问题上帮助过我的所有人,非常感谢。
我自己的背景:我对 C++ 还是很陌生,我的编码经验是在 MATLAB 中,所以有很多概念我学得很快,因此对我来说很新,所以请原谅我的错误语言我可能会使用 C++。
问题:
我最近写了一些代码,使用 Boolean Set Operations on General Polygons.
的文档中的代码找到折线和圆(即折线的缓冲区)的 Minkowski 和
这里在输出中使用了一个General_polygon_set_2
的概念,如果使用上面例子中的输出代码,我可以得到一个Polygon_with_holes_2
class的如下输出:
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 坐标到这些括号中包含的另一个坐标 []
. circle 的参数是:(x,y,radius,orientation).
接下来,由于我们有空洞,所以在写完.outer_boundary()
之后,再显示两个整数。第一个说明洞的数量,第二个说明这个洞中的顶点数,然后是那个洞的那些顶点。然后,一旦该孔被写出,另一个整数将被写入,描述该孔中的顶点数,然后对所有孔继续,完成对多边形的描述。
因此,我当前的问题是一次解析出每条单独的曲线,以便我可以对它们进行操作。
我可以使用 documentation 中的以下函数:
.outer_boundary()
: returns表示外边界的一般多边形。
.holes_begin()
: returns 孔的开始迭代器。
.holes_end()
:
所以我的想法是将 General_polygon_set_2
分解为 General_polygon_2
,然后将其分解为 .outer_boundary()
和不同的孔。最后,对于每组曲线,将它们分解成单独的 curves.
我不太确定该怎么做,我只知道我需要单独的曲线数据,以便我可以对它们进行自己的操作。任何帮助,我们将一如既往地非常感激!
注意:我实际上在通读安排文档后删除了这个 post,认为这是一个太明显的答案,但过了一段时间我仍然真的不知道如何正确地提取这个信息,我想最大的问题是我对 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;
现在我正在努力隔离孔,然后将它们分解成每条单独的曲线。
The doc here 表示 Hole_const_iterator
的 value_type 是 General_polygon_2
,这意味着您可以使用“[=22] 遍历所有“曲线” =]()" 和 "holes-end",就像你想的那样。为此,请使用以下语法:
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() 以相同的方式迭代每个多边形的曲线。
所以要迭代polygon_with_holes的每条曲线:
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.
}
}
首先,我要感谢迄今为止在我使用 CGAL 库时遇到的问题上帮助过我的所有人,非常感谢。
我自己的背景:我对 C++ 还是很陌生,我的编码经验是在 MATLAB 中,所以有很多概念我学得很快,因此对我来说很新,所以请原谅我的错误语言我可能会使用 C++。
问题:
我最近写了一些代码,使用 Boolean Set Operations on General Polygons.
的文档中的代码找到折线和圆(即折线的缓冲区)的 Minkowski 和这里在输出中使用了一个General_polygon_set_2
的概念,如果使用上面例子中的输出代码,我可以得到一个Polygon_with_holes_2
class的如下输出:
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 坐标到这些括号中包含的另一个坐标 []
. circle 的参数是:(x,y,radius,orientation).
接下来,由于我们有空洞,所以在写完.outer_boundary()
之后,再显示两个整数。第一个说明洞的数量,第二个说明这个洞中的顶点数,然后是那个洞的那些顶点。然后,一旦该孔被写出,另一个整数将被写入,描述该孔中的顶点数,然后对所有孔继续,完成对多边形的描述。
因此,我当前的问题是一次解析出每条单独的曲线,以便我可以对它们进行操作。
我可以使用 documentation 中的以下函数:
.outer_boundary()
: returns表示外边界的一般多边形。
.holes_begin()
: returns 孔的开始迭代器。
.holes_end()
:
所以我的想法是将 General_polygon_set_2
分解为 General_polygon_2
,然后将其分解为 .outer_boundary()
和不同的孔。最后,对于每组曲线,将它们分解成单独的 curves.
我不太确定该怎么做,我只知道我需要单独的曲线数据,以便我可以对它们进行自己的操作。任何帮助,我们将一如既往地非常感激!
注意:我实际上在通读安排文档后删除了这个 post,认为这是一个太明显的答案,但过了一段时间我仍然真的不知道如何正确地提取这个信息,我想最大的问题是我对 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;
现在我正在努力隔离孔,然后将它们分解成每条单独的曲线。
The doc here 表示 Hole_const_iterator
的 value_type 是 General_polygon_2
,这意味着您可以使用“[=22] 遍历所有“曲线” =]()" 和 "holes-end",就像你想的那样。为此,请使用以下语法:
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() 以相同的方式迭代每个多边形的曲线。
所以要迭代polygon_with_holes的每条曲线:
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.
}
}