【问题标题】:Boost.Geometry polygon point assignmentBoost.Geometry 多边形点赋值
【发布时间】:2017-03-08 23:45:57
【问题描述】:

我正在尝试使用 boost 几何并且无法将点分配给多边形。 假设我创建了一个静态点向量

boost::geometry::model::d2::point_xy<double> >* a; 

然后我创建一个多边形:

boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;

假设我已经定义了 a 点的值。

如何将点从 a 分配到 P?

【问题讨论】:

    标签: c++ boost boost-geometry


    【解决方案1】:

    boost::geometry::assign_points() 算法可用于将一系列点分配给多边形。

    如果a 是一个点范围而P 是一个多边形,那么可以使用:

    boost::geometry::assign_points(P, a);
    

    这是一个完整的example,演示了assign_points的用法:

    #include <iostream>
    #include <vector>
    #include <boost/assign/std/vector.hpp>
    #include <boost/geometry.hpp>
    #include <boost/geometry/algorithms/area.hpp>
    #include <boost/geometry/algorithms/assign.hpp>
    #include <boost/geometry/geometries/point_xy.hpp>
    #include <boost/geometry/geometries/polygon.hpp>
    #include <boost/geometry/io/dsv/write.hpp>
    
    int main()
    {
        using namespace boost::assign;
        typedef boost::geometry::model::d2::point_xy<double> point_xy;
    
        // Create points to represent a 5x5 closed polygon.
        std::vector<point_xy> points;
        points +=
          point_xy(0,0),
          point_xy(0,5),
          point_xy(5,5),
          point_xy(5,0),
          point_xy(0,0)
          ;
    
        // Create a polygon object and assign the points to it.
        boost::geometry::model::polygon<point_xy> polygon;  
        boost::geometry::assign_points(polygon, points);
    
        std::cout << "Polygon " << boost::geometry::dsv(polygon) << 
          " has an area of " << boost::geometry::area(polygon) << std::endl;
    }
    

    产生以下输出:

    Polygon (((0, 0), (0, 5), (5, 5), (5, 0), (0, 0))) has an area of 25
    

    【讨论】:

    • 谢谢,但我已经看到了。我所拥有的不是 std::vector,而是一个内存数组,一个指针。我知道一种解决方案是迭代数组,获取每个值并将其附加到多边形,但我想知道是否有任何方法可以更直接地做到这一点,比如你的向量示例
    • @user3013172 尽管该示例使用std::vector,但assign_points() 算法对模拟Boost.Range concept 的类型进行操作。这个example 使用一个数组,并使用一个由数组的开始和结束指针构造的std::pair 对象调用assign_points()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2013-02-05
    • 1970-01-01
    • 2022-10-17
    • 2010-10-28
    相关资源
    最近更新 更多