增强索引处的几何多边形插入点

boost geometry polygon insert point at index

本文关键字:多边形 插入 入点 索引 增强      更新时间:2023-10-16

如何在多边形的索引处添加一个点?

在正确的索引处插入点(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)))