用boost :: geometry扩展多边形?

科学的

我知道可以通过boost :: geometry向彼此添加/减去不同的多边形,示例可以在网络的不同位置找到。现在我要做的是不同的事情:

我有一个2D多边形,我想按给定的大小扩展/缩小。因此,我不是在谈论简单的缩放操作,而是在讨论一个函数,该函数将从输入数据中计算出一个新的多边形:

  • 在扩展功能的情况下,必须在输入多边形的角上添加新的坐标点,例如,在该位置处的圆角或平角

  • 如果输入多边形的收缩函数矢量太小而无法“存活”到收缩操作中,则必须将其完全删除

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

谢谢!

看到

该功能在OGC简单功能规范中称为“缓冲”。

Boost Geometry支持大多数2D笛卡尔几何(并且您可以轻松地通过转换完成其余部分),并且仅在其他坐标系中指向。

文献资料

可用策略: 在此处输入图片说明

这是示例代码

生活在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;
}

点可以像这样“一起成长” 在此处输入图片说明

具有圆角的线串示例: 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Boost Geometry:多边形和盒子的交集

来自分类Dev

Boost.geometry实现多边形概念

来自分类Dev

用boost :: polygon添加多边形无法编译?

来自分类Dev

Boost多边形丢弃输入多边形

来自分类Dev

boost :: geometry 3D多边形交集编译错误

来自分类Dev

Boost :: Geometry-在3D空间中查找2D多边形的区域?

来自分类Dev

Boost :: geometry无法在点和多边形上使用内部方法吗?

来自分类Dev

Boost :: geometry如何将多边形添加到multi_polygon

来自分类Dev

访问boost :: geometry多边形中的点数据时出错

来自分类Dev

Boost :: geometry无法在点和多边形上使用内部方法吗?

来自分类Dev

Boost.Geometry找不到多边形线相交的第二点

来自分类Dev

在Boost.Geometry中将两个多边形合并为一个多边形:仅外部点,无孔

来自分类Dev

Boost多边形序列化

来自分类Dev

使用boost的多边形联合

来自分类Dev

用ggplot填充voronoi多边形

来自分类Dev

用mapbox创建的多边形的中心

来自分类Dev

用素面查找多边形区域

来自分类Dev

用另一个多边形分割一个多边形

来自分类Dev

用另一个多边形分割一个多边形

来自分类Dev

Boost多边形序列化:Ring

来自分类Dev

如何使用svg用纹理填充多边形?

来自分类Dev

用图案-R填充地理空间多边形

来自分类Dev

用某种颜色填充多边形

来自分类Dev

R:用条件颜色绘制多边形

来自分类Dev

开罗用剖面线填充多边形

来自分类Dev

Javascript:用经度和纬度减去多边形

来自分类Dev

用solr异常索引多边形(找不到jts?)

来自分类Dev

用多边形在Python中计算Pi

来自分类Dev

如何使用svg用纹理填充多边形?