如何使用Boost获得2D点的凸包面积?
Posted
技术标签:
【中文标题】如何使用Boost获得2D点的凸包面积?【英文标题】:How to get area of convex hull of 2D points using Boost? 【发布时间】:2020-05-22 16:24:24 【问题描述】:我是 boost 新手,我尝试的所有操作都会导致屏幕出现编译器错误。这是我最近的尝试:
#include <boost/geometry/algorithm/convex_hull.hpp>
#include <boost/geometry/algorithm/area.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/multi_point.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
namespace bg = boost::geometry
BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
double getHullArea(std::vector<double> x, std::vector<double> y)
typedef boost::tuple<double,double> point;
typedef bg::model::multi_point<point> points;
points p;
for (size_t i=0; i<x.size(); i++)
bg::append(p, point(x[i],y[i]));
bg::model::polygon hull;
bg::convex_hull(p, hull);
return bg::area(hull);
我知道有一些巧妙的方法可以避免多点,但我想了解我在使用这种基本方法时做错了什么。错误出现在 convex_hull
调用中,可能与我定义 hull 的方式有关。
编辑:添加了我在收到错误时使用的包含。
【问题讨论】:
有什么错误? 没有什么对我有意义或指向任何具体的东西。它返回到 boost hpp 文件。示例:“在 'struct::boost::geometry::strategy::not_implemented 中没有名为 'point_type' 的类型”。它在另一台机器上,所以我不能全部粘贴进去。 这可能对您没有意义,但不应忽略错误消息,请将它们包含在问题中 代码在非联网机器上。如果可以的话,我会粘贴它们。底线错误指向convex_hull_concept.hpp,第42、45和48行。它们都以我之前的评论“未实现”结尾。 当我为polygon
添加模板参数时没有错误:godbolt.org/z/gNGc_5。您需要包含错误,否则我们无法知道您得到了什么错误
【参考方案1】:
问题在于包含。 <boost/geometry.hhp>
必须包含在内。这有效:
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/multi_point.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
namespace bg = boost::geometry
BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
double getHullArea(std::vector<double> x, std::vector<double> y)
typedef boost::tuple<double,double> point;
typedef bg::model::multi_point<point> points;
points p;
for (size_t i=0; i<x.size(); i++)
bg::append(p, point(x[i],y[i]));
bg::model::polygon hull;
bg::convex_hull(p, hull);
return bg::area(hull);
【讨论】:
以上是关于如何使用Boost获得2D点的凸包面积?的主要内容,如果未能解决你的问题,请参考以下文章