如何在多边形的索引处添加一个点?
在正确的索引处插入点(2.5, 7.5)。
输出:
(((0, 0), (0, 5), (5, 5), (5, 0), (0,0), (2.5, 7.5)))
------------------- ▼
(((0, 0), (0, 5), (2.5, 7.5), (5, 5),(5, 0), (0, 0)))
#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
int main()
{
typedef boost::geometry::model::d2::point_xy<double> point;
typedef boost::geometry::model::polygon<point> polygon;
polygon poly;
boost::geometry::append ( poly, point(0, 0) );
boost::geometry::append ( poly, point(0, 5) );
boost::geometry::append ( poly, point(5, 5) );
boost::geometry::append ( poly, point(5, 0) );
boost::geometry::append ( poly, point(0, 0) );
poly.outer().push_back( point(2.5, 7.5) );
std::cout << boost::geometry::dsv(poly) << std::endl;
return 0;
}
据我了解,poly.outer 只是一个 std::vector,因此您应该能够使用 insert 方法将值放置在所需的索引处:
#include <iostream>
#include <vector>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
int main()
{
typedef boost::geometry::model::d2::point_xy<double> point;
typedef boost::geometry::model::polygon<point> polygon;
polygon poly;
boost::geometry::append(poly, point(0, 0));
boost::geometry::append(poly, point(0, 5));
boost::geometry::append(poly, point(5, 5));
boost::geometry::append(poly, point(5, 0));
boost::geometry::append(poly, point(0, 0));
// Insert point at index 2
auto &outer_ring = poly.outer();
outer_ring.insert(outer_ring.begin() + 2, point(2.5, 7.5));
std::cout << boost::geometry::dsv(poly) << std::endl;
return 0;
}
输出为:
(((0, 0), (0, 5), (2.5, 7.5), (5, 5), (5, 0), (0, 0)))