ZBLOG

用点拟合平面然后计算点到面距离 using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel; using Point_3 = Kernel::Point_3; using Vector_3 = Kernel::Vector_3; using Plane_3 = Kernel::Plane_3; using Segment_3 = Kernel::Segment_3; using Line_3 = Kernel::Li...

将这两段代码结合,你可以这样实现点到平面的距离计算:

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/linear_least_squares_fitting_3.h>
#include <Eigen/Core>

using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel;
using Point_3 = Kernel::Point_3;
using Plane_3 = Kernel::Plane_3;

float calculate_plane_from_pos6f(std::vector<std::array<float, 6>>& points, Plane_3& plane) {
    std::vector<Point_3> final_pts_b;
    for (const auto& point : points) {
        final_pts_b.emplace_back(point[0], point[1], point[2]);
    }
    
    auto variance = CGAL::linear_least_squares_fitting_3(final_pts_b.begin(), final_pts_b.end(), plane,
                                                         CGAL::Dimension_tag<0>());
    
    return variance;
}

inline float distance_to_plane(const Eigen::Vector3f& P, const Plane_3& plane) {
    return std::abs(plane.a() * P.x() + plane.b() * P.y() + plane.c() * P.z() + plane.d()) /
           std::sqrt(plane.a() * plane.a() + plane.b() * plane.b() + plane.c() * plane.c());
}

int main()
{
    // 示例使用
    std::vector<std::array<float, 6>> points{{1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f},
                                             {2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f},
                                             {3.0f, 6.0f, 9.0f, 12.0f, 15.0f, 18.0f}};
    
    Plane_3 plane;
    float variance = calculate_plane_from_pos6f(points, plane);
    
    Eigen::Vector3f P(1.0f, 2.0f, 3.5f); // 要计算距离的点
    float distance = distance_to_plane(P, plane);
    
    return 0;
}

这段代码使用了CGAL库进行平面拟合,并且结合Eigen库计算点到平面的距离。在示例中,我们创建了一个包含6个坐标值的点云数组,通过calculate_plane_from_pos6f函数来拟合平面,并返回拟合方差。然后,使用distance_to_plane函数可以计算给定点与平面之间的距离。注意需要安装和链接CGAL库以及Eigen库来编译运行该代码。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=13926

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?