Boost基本操作

10 篇文章 0 订阅
1 篇文章 0 订阅

Boost中的多边形交并比

BBox是存放最大点和最小点的包围框。

double isOverlapped(BBox2D &bbox_a, const BBox2D &bbox_b)
{
	double area_intersect = 0.0, area_union = 0.0;
	// validity check
	if (!bbox_a.IsValid() || !bbox_b.IsValid()) return 0.0;
	// intersect operation between two kind of boundary
	typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false> polygon;
	// add boundary point to polygon counterclock wise
	polygon poly_src, poly_tgt;
	std::vector<boost::geometry::model::d2::point_xy<double>> points;
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_a.min.x, bbox_a.min.y));
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_a.max.x, bbox_a.min.y));
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_a.max.x, bbox_a.max.y));
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_a.min.x, bbox_a.max.y));
	boost::geometry::assign_points(poly_src, points);
	std::cout << boost::geometry::area(poly_src) << std::endl;
	points.clear();
	// for the tgt bbox boundary
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_b.min.x, bbox_b.min.y));
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_b.max.x, bbox_b.min.y));
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_b.max.x, bbox_b.max.y));
	points.emplace_back(boost::geometry::model::d2::point_xy<double>(bbox_b.min.x, bbox_b.max.y));
	boost::geometry::assign_points(poly_tgt, points);
	std::cout << boost::geometry::area(poly_tgt) << std::endl;
	std::deque<polygon> poly_output_intersect, poly_output_union;
	boost::geometry::intersection(poly_src, poly_tgt, poly_output_intersect);
	if (poly_output_intersect.empty()) return 0.0;
	boost::geometry::union_(poly_src, poly_tgt, poly_output_union);
	for (auto p : poly_output_intersect)
	{
		area_intersect += boost::geometry::area(p);
	}
	for (auto p : poly_output_union)
	{
		area_union += boost::geometry::area(p);
	}
	std::cout << area_intersect << ", " << area_union << ", " << area_intersect / area_union << std::endl;
	return area_union > 0.01 ? area_intersect / area_union : 0.0;
}

Boost中文件系统API

total_size = boost::filesystem::file_size("文件路径");
float file_size = 0.f, disk_available_size = 0.f;
file_size = total_size / 1073741824.f;
std::cout << "Current file size is " << file_size << " GB." << std::endl;
// get the setting destination dir and the root dir path of the out put path
boost::filesystem::path p = output_path;
boost::filesystem::space_info s = boost::filesystem::space(p.root_path());
disk_available_size = s.available / 1073741824.f;
std::cout << "Current root dir disk capacity is " << s.capacity / 1073741824.f << " GB." << std::endl;
std::cout << "Current root dir disk available is " << s.available / 1073741824.f << " GB." << std::endl;

还有其他很多api等待后续挖掘。

参考资料
  1. boost多边形求交;
  2. boost多边形求并;
  3. boost多边形求差
  4. boost官方文档;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Boost库提供了一个名为“property_tree”的工具,可以方便地操作JSON数据。以下是一个示例代码,说明如何使用Boost库操作JSON数据: ```cpp #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> #include <iostream> using boost::property_tree::ptree; using boost::property_tree::read_json; using boost::property_tree::write_json; int main() { // 创建一个空的property_tree对象 ptree pt; // 从JSON字符串中读取数据到property_tree对象中 std::string json_str = "{\"name\":\"Tom\",\"age\":20}"; std::stringstream ss(json_str); read_json(ss, pt); // 从property_tree对象中获取数据 std::string name = pt.get<std::string>("name"); int age = pt.get<int>("age"); // 修改property_tree对象中的数据 pt.put("age", 21); // 将property_tree对象中的数据输出为JSON格式的字符串 std::stringstream ss_out; write_json(ss_out, pt); std::string json_str_out = ss_out.str(); std::cout << json_str_out << std::endl; return 0; } ``` 在上述示例代码中,我们首先创建了一个空的property_tree对象“pt”,然后从一个JSON字符串中读取数据到该对象中。接着,我们从property_tree对象中获取了“name”和“age”两个数据,并将“age”修改为21。最后,我们将property_tree对象中的数据输出为JSON格式的字符串。 需要注意的是,Boost库中的property_tree工具只能处理JSON数据的基本类型,如字符串、整数、浮点数等。如果JSON数据中包含了复杂类型,如数组和嵌套对象,需要使用其他工具库或手动解析处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值