gpt4 book ai didi

c++ - 用boost::geometry扩展多边形?

转载 作者:行者123 更新时间:2023-12-02 10:14:18 30 4
gpt4 key购买 nike

我知道可以通过boost::geometry向彼此添加/减去不同的多边形,示例可以在网络的不同位置找到。现在我要做的是不同的事情:
我有一个2D多边形,我想按给定的大小扩展/缩小。因此,我不是在谈论简单的缩放操作,而是在讨论一个函数,该函数将从输入数据中计算出一个新的多边形:

在扩展功能的情况下

  • 必须在输入多边形的角上添加新的坐标点,例如在这个位置的圆角或平角
  • ,如果输入多边形的收缩函数 vector 太小而无法“存活”到收缩操作中,则必须完全删除

  • 我的问题:boost::geometry这样的操作可能吗?如果是,该怎么办?
    谢谢!

    最佳答案

    该功能在OGC简单功能规范中称为“缓冲”。
    Boost Geometry支持大多数2D笛卡尔几何(并且您可以轻松地通过转换完成其余部分),并且仅在其他坐标系中指向。
    Documentation
    可用策略:enter image description here

  • 加入策略:join_round (cartesian)
  • 加入策略:join_miter (cartesian)
  • EndStrategy:end_round (cartesian)
  • EndStrategy:end_flat (cartesian)
  • DistanceStrategy:distance_symmetric
  • DistanceStrategy:distance_asymmetric
  • PointStrategy:point_circle (cartesian)
  • PointStrategy:point_square (cartesian)
  • PointStrategy:geographic_point_circle (geographic)
  • SideStrategy:side_straight (cartesian)

  • 这是示例代码
    Live On Coliru
    #include <boost/geometry.hpp>
    #include <boost/geometry/geometries/point_xy.hpp>
    #include <boost/geometry/geometries/geometries.hpp>


    int main()
    {
    typedef double coordinate_type;
    typedef boost::geometry::model::d2::point_xy<coordinate_type> point;
    typedef boost::geometry::model::polygon<point> polygon;

    // Declare strategies
    const double buffer_distance = 1.0;
    const int points_per_circle = 36;
    boost::geometry::strategy::buffer::distance_symmetric<coordinate_type> distance_strategy(buffer_distance);
    boost::geometry::strategy::buffer::join_round join_strategy(points_per_circle);
    boost::geometry::strategy::buffer::end_round end_strategy(points_per_circle);
    boost::geometry::strategy::buffer::point_circle circle_strategy(points_per_circle);
    boost::geometry::strategy::buffer::side_straight side_strategy;

    // Declare output
    boost::geometry::model::multi_polygon<polygon> result;

    // Declare/fill a linestring
    boost::geometry::model::linestring<point> ls;
    boost::geometry::read_wkt("LINESTRING(0 0,4 5,7 4,10 6)", ls);

    // Create the buffer of a linestring
    boost::geometry::buffer(ls, result,
    distance_strategy, side_strategy,
    join_strategy, end_strategy, circle_strategy);


    // Declare/fill a multi point
    boost::geometry::model::multi_point<point> mp;
    boost::geometry::read_wkt("MULTIPOINT((3 3),(4 4),(6 2))", mp);

    // Create the buffer of a multi point
    boost::geometry::buffer(mp, result,
    distance_strategy, side_strategy,
    join_strategy, end_strategy, circle_strategy);


    // Declare/fill a multi_polygon
    boost::geometry::model::multi_polygon<polygon> mpol;
    boost::geometry::read_wkt("MULTIPOLYGON(((0 1,2 5,5 3,0 1)),((1 1,5 2,5 0,1 1)))", mpol);

    // Create the buffer of a multi polygon
    boost::geometry::buffer(mpol, result,
    distance_strategy, side_strategy,
    join_strategy, end_strategy, circle_strategy);


    return 0;
    }
    点可以像这样 enter image description here“一起成长”
    带有圆角的线串示例: enter image description here

    关于c++ - 用boost::geometry扩展多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62509609/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com