[英]Initializing a polygon in boost::geometry
I am new to the generic geometry library that is proposed for inclusion with boost: 我是通用几何库的新手,建议包含在boost中:
http://geometrylibrary.geodan.nl/
I have two vectors vector<int> Xb, Yb
that I am trying to create a polygon from. 我有两个向量
vector<int> Xb, Yb
,我试图从中创建一个多边形。 I am trying to get something along the lines of the following code snippet: 我试图获得以下代码片段的内容:
polygon_2d P;
vector<double>::const_iterator xi;
vector<double>::const_iterator yi;
for (xi=Xb.begin(), yi=Yb.begin(); xi!=Xb.end(); ++xi, ++yi)
P.push_back (make<point_2d>(*xi, *yi));
The above code does not work, complaining that P
does not have a push_back
member function. 上面的代码不起作用,抱怨
P
没有push_back
成员函数。 How do I initialize the polygon from points that have coordinates vector<int> Xb,vector<int> Yb
? 如何从具有坐标
vector<int> Xb,vector<int> Yb
点初始化多边形?
Here is example to the extension of your original question you asked as a comment below Kirill's answer: Are intersections between polygons possible? 以下是您在Kirill的答案下面作为评论提出的原始问题的扩展示例: 多边形之间的交叉点是否可能?
Yes, polygon-polygon intersections are supported by Boost.Geometry (aka GGL) 是的, Boost.Geometry(又名GGL)支持多边形 - 多边形交叉点
#include <iostream>
#include <vector>
#include <boost/geometry/geometry.hpp>
#include <boost/geometry/geometries/cartesian2d.hpp>
#include <boost/geometry/geometries/adapted/c_array_cartesian.hpp>
using namespace boost::geometry;
int main(void)
{
// Define a polygons and fill the outer rings.
polygon_2d a;
{
const double c[][2] = {
{160, 330}, {60, 260}, {20, 150}, {60, 40}, {190, 20}, {270, 130}, {260, 250}, {160, 330}
};
assign(a, c);
}
correct(a);
std::cout << "A: " << dsv(a) << std::endl;
polygon_2d b;
{
const double c[][3] = {
{300, 330}, {190, 270}, {150, 170}, {150, 110}, {250, 30}, {380, 50}, {380, 250}, {300, 330}
};
assign(b, c);
}
correct(b);
std::cout << "B: " << dsv(b) << std::endl;
// Calculate interesection
typedef std::vector<polygon_2d > polygon_list;
polygon_list v;
intersection_inserter<polygon_2d>(a, b, std::back_inserter(v));
std::cout << "Intersection of polygons A and B" << std::endl;
for (polygon_list::const_iterator it = v.begin(); it != v.end(); ++it)
{
std::cout << dsv(*it) << std::endl;
}
return 0;
}
Here is the result (the polygon being intersection is moved to south for better visibility): 这是结果(交叉的多边形向南移动以获得更好的可见性):
I hope it will work for you. 我希望它对你有用。
append(P, make<point_2d>(*xi, *yi));
You can also use a tuple to initialize the polygon 您还可以使用元组初始化多边形
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
and 和
boost::geometry::assign_points(
polygon, boost::assign::tuple_list_of
(300, 330) (190, 270) (150, 170) (150, 110) (250, 30) (380, 50)
(380, 250) (300, 330)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.