gpt4 book ai didi

c++ - 将 boost::geometry 多边形转换为 STL 对象

转载 作者:可可西里 更新时间:2023-11-01 17:56:15 27 4
gpt4 key购买 nike

如何将 boost::geometry 多边形放入 STL 对象中?

我确信这一定很简单,因为我无法在文档中的任何地方找到示例。然而,我花了大约 4 个完整的工作日来尝试做这件小事。我是 C++ 的新手(长期的 R 程序员),但这些小的数据转换事情让我发疯。

是的,有一个问题的标题很像我的:Getting the coordinates of points from a Boost Geometry polygon

但是代码太复杂了(发帖者一直在修改它很多次),我无法理解它的正反面,我也无法想象其他 C++ 新手能够做到。

这是一个应该转换为其他一些 boost::geometry 数据类型的简单示例,因此希望任何人都能理解它。

 #include <iostream>

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>

BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)

//One thing I tried is a function to use with `for_each_point()` so I set that up first.

template <typename Point>
void get_coordinates(Point const& p)
{
using boost::geometry::get;
std::cout << get<0>(p) get<1>(p) << std::endl;
}

int main()
{
typedef boost::tuple<double, double> point;
typedef boost::geometry::model::polygon<point> polygon;

polygon poly;
boost::geometry::read_wkt("polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6, 3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7, 2.0 1.3))", poly);

polygon hull;
boost::geometry::convex_hull(poly, hull);

// Now I know I can `dsv()` and print to the screen like this:

using boost::geometry::dsv;
std::cout
<< "hull: " << dsv(hull) << std::endl;

// And/Or I can use my function with for_each_point()



boost::geometry::for_each_point(hull, get_coordinates<point>);

return 0;
}

如何将这些坐标放入 STL 容器中?我更喜欢两个 std::vector,一个用于 x,一个用于 y,但任何东西都可以。

最佳答案

多边形已经是 STL 容器格式,boost::geometry::polygon 的外环和内环默认存储在 std::vector 中。

您可能想要的(考虑您的评论)是:

  polygon hull;
boost::geometry::convex_hull(poly, hull);
boost::geometry::for_each_point(boost::geometry::exterior_ring(hull), get_coordinates<point>);

如果您将 get_coordinates 函数更正为(注意 << 用法),这将起作用:

  template <typename Point>
void get_coordinates(Point const& p)
{
using boost::geometry::get;
std::cout << get<0>(p) << ", " << get<1>(p) << std::endl;
}

并将您的评论指示符更改为//;-)

关于c++ - 将 boost::geometry 多边形转换为 STL 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394280/

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