boost geometry 点 投影 多边形 例子
以下是一个使用Boost.Geometry库进行点投影到多边形的简单示例:
#include <iostream>
#include <vector>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/algorithms/within.hpp>
#include <boost/geometry/algorithms/area.hpp>
#include <boost/geometry/algorithms/distance.hpp>
#include <boost/geometry/algorithms/transform.hpp>
#include <boost/geometry/algorithms/centroid.hpp>
#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
#include <boost/geometry/strategies/transform/inverse_transformer.hpp>
using namespace boost::geometry;
typedef model::d2::point_xy<double> point;
typedef model::polygon<point> polygon;
int main()
{
// 定义多边形
polygon poly;
append(poly.outer(), point(0, 0));
append(poly.outer(), point(0, 10));
append(poly.outer(), point(10, 10));
append(poly.outer(), point(10, 0));
correct(poly);
// 定义点
point p(5, 5);
// 投影点到多边形
point projected_point;
distance(p, poly, projected_point);
// 检查投影点是否在多边形内
bool within_poly = within(projected_point, poly);
// 输出结果
std::cout << "Original point: (" << get<0>(p) << ", " << get<1>(p) << ")" << std::endl;
std::cout << "Projected point: (" << get<0>(projected_point) << ", " << get<1>(projected_point) << ")" << std::endl;
std::cout << "Is projected point within polygon: " << within_poly << std::endl;
return 0;
}
在上面的示例中,我们首先创建一个简单的矩形多边形,并定义一个点。然后,我们使用Boost.Geometry库中的distance()函数将点投影到多边形上,并将投影点存储在projected_point变量中。接下来,我们使用within()函数检查投影点是否在多边形内,并将结果存储在within_poly变量中。最后,我们输出原始点,投影点和投影点是否在多边形内的结果。
请注意,这里我们使用distance()函数将点投影到多边形上,因为该函数不仅计算点到多边形的距离,还返回最近的多边形顶点或边缘上的点。这使我们可以更准确地找到投影点
原文地址: https://www.cveoy.top/t/topic/de0J 著作权归作者所有。请勿转载和采集!