//线段的两个端点
pcl::PointXYZ p1;
pcl::PointXYZ p2;
//裁剪到缓冲区角点内(CGAL)
pcl::PointCloud<pcl::PointXYZ>::Ptr bb_result(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointXYZ corner1, corner2, corner3, corner4;
double temp = sqrt(pow((p2.x - p1.x), 2) + pow((p2.y - p1.y), 2));
corner1.x = buffer * (p1.y - p2.y) / temp + p1.x; corner1.y = buffer * (p2.x - p1.x) / temp + p1.y; corner1.z = 0;
corner2.x = buffer * (p1.y - p2.y) / temp + p2.x; corner2.y = buffer * (p2.x - p1.x) / temp + p2.y; corner2.z = 0;
corner3.x = buffer * (p2.y - p1.y) / temp + p1.x; corner3.y = buffer * (p1.x - p2.x) / temp + p1.y; corner3.z = 0;
corner4.x = buffer * (p2.y - p1.y) / temp + p2.x; corner4.y = buffer * (p1.x - p2.x) / temp + p2.y; corner4.z = 0;
CGAL_Point2 points[] = {CGAL_Point2(corner1.x,corner1.y), CGAL_Point2(corner2.x,corner2.y),
CGAL_Point2(corner4.x,corner4.y), CGAL_Point2(corner3.x,corner3.y)};
for (int i = 0; i < merge_cloud->size(); i++)
{
if (check_inside(CGAL_Point2(merge_cloud->points[i].x, merge_cloud->points[i].y), points, points + 4, K()))
{
double x = 0;
bb_result->push_back(merge_cloud->points[i]);
}
}
利用CGAL裁剪一个线段垂直方向缓冲区内的点
最新推荐文章于 2024-09-13 16:27:15 发布