当前位置: 首页 > news >正文

宝安高端网站建设公司北京网站开发公司有哪些

宝安高端网站建设公司,北京网站开发公司有哪些,公司做网站怎么样,鲜花商城网站建设1 介绍 Fitting trimmed B-splines#xff08;修剪B样条曲线拟合#xff09;是一种用于对给定的点云数据进行曲线拟合的算法。该算法使用B样条曲线模型来逼近给定的点云数据#xff0c;并通过对模型进行修剪来提高拟合的精度和准确性。 B样条曲线是一种常用的曲线表示方法…1 介绍 Fitting trimmed B-splines修剪B样条曲线拟合是一种用于对给定的点云数据进行曲线拟合的算法。该算法使用B样条曲线模型来逼近给定的点云数据并通过对模型进行修剪来提高拟合的精度和准确性。 B样条曲线是一种常用的曲线表示方法它通过一组控制点和节点向量来定义曲线的形状。B样条曲线具有局部控制性和平滑性因此在曲线拟合问题中被广泛应用。 修剪B样条曲线拟合算法的基本步骤如下 初始化定义一个B样条曲线模型并设置模型的阶数、节点向量和控制点。 迭代优化通过迭代优化的方法不断调整模型的控制点使得模型更好地逼近给定的点云数据。在每次迭代中根据给定的拟合参数和优化目标函数计算出新的控制点位置。 修剪根据给定的修剪参数对拟合的B样条曲线进行修剪。修剪可以通过删除不需要的曲线段或调整曲线段的权重来实现。修剪的目的是提高拟合的准确性和精度。 终止条件根据设定的终止条件判断是否终止迭代优化过程。终止条件可以是达到最大迭代次数、拟合精度满足要求或其他自定义条件。 输出结果输出最终的修剪B样条曲线拟合结果。结果可以是修剪后的B样条曲线模型也可以是曲线的控制点和节点向量等表示。 2 效果 3 说明 在进行B样条曲面拟合时通常需要先对曲面进行拟合然后再对曲面上的曲线进行拟合。这是因为曲面上的曲线通常是曲面的边界或者用于修剪曲面的曲线它们与曲面的形状紧密相关因此需要单独进行拟合和调整。 首先进行B样条曲面拟合时目标是通过一组控制点和节点向量来逼近给定的点云数据以生成一个平滑的曲面模型。这个曲面模型可以用来表示曲面的整体形状。 然后在曲面拟合的基础上进行B样条曲线拟合。曲线拟合通常是对曲面的边界曲线或者修剪曲线进行拟合。这些曲线与曲面的形状紧密相关因此需要单独进行拟合和调整。通过对曲线进行拟合可以更好地捕捉曲面的边界形状或者修剪曲线的形状从而提高拟合的精度和准确性。 总结起来进行B样条曲面拟合后还需要对曲面上的曲线进行拟合的原因是曲线与曲面的形状紧密相关需要单独进行拟合和调整以提高拟合的精度和准确性。通过分别拟合曲面和曲线可以更好地捕捉曲面的整体形状和边界形状从而得到更好的拟合结果。 曲面拟合时的参数 order曲面的阶数。该参数定义了B样条曲面的阶数即每个控制点的影响范围。较高的阶数可以提供更大的自由度但也会增加计算时间和内存消耗。 refinement细化次数。该参数定义了在拟合过程中进行的细化次数。通过细化可以在拟合过程中增加新的控制点以提高拟合的精度和准确性。 iterations迭代次数。该参数定义了拟合过程中的迭代次数。增加迭代次数可以提高拟合的精度但也会增加计算时间和内存消耗。 mesh_resolution网格分辨率。该参数定义了生成曲面网格的分辨率。较高的分辨率会导致更细致的曲面表示但也会增加计算时间和内存消耗。 params.interior_smoothness内部平滑度。该参数用于调整曲面内部的平滑度。较大的值会使曲面更平滑。 params.interior_weight内部权重。该参数用于调整曲面内部点对拟合结果的权重。较大的权重会使内部点对拟合结果的影响更大。 params.boundary_smoothness边界平滑度。该参数用于调整曲面边界的平滑度。较大的值会使曲面边界更平滑。 params.boundary_weight边界权重。该参数用于调整曲面边界点对拟合结果的权重。较大的权重会使边界点对拟合结果的影响更大。 曲线拟合的参数 curve_params.addCPsAccuracy添加控制点的精度。控制点是用于定义B样条曲线形状的关键点。该参数指定了在拟合过程中添加新的控制点的精度。较小的值会导致更精确的拟合结果但可能会增加计算时间和内存消耗。 curve_params.addCPsIteration添加控制点的迭代次数。在拟合过程中可以通过迭代的方式不断添加新的控制点来改进拟合结果。该参数指定了添加控制点的迭代次数。增加迭代次数可以提高拟合的精度但也会增加计算时间和内存消耗。 curve_params.maxCPs最大控制点数。该参数限制了拟合过程中允许的最大控制点数。超过这个数目的控制点将被丢弃。通过调整这个参数可以控制拟合结果的复杂度和平滑度。 curve_params.accuracy拟合的精度。该参数指定了拟合结果与原始数据之间的误差阈值。较小的值会导致更精确的拟合结果但可能会增加计算时间和内存消耗。 curve_params.iterations迭代次数。该参数指定了拟合过程中的迭代次数。增加迭代次数可以提高拟合的精度但也会增加计算时间和内存消耗。 curve_params.param.closest_point_resolution最近点的分辨率。该参数用于计算曲线上最近点的分辨率。较小的值会导致更精确的最近点计算但可能会增加计算时间和内存消耗。 curve_params.param.closest_point_weight最近点的权重。该参数用于计算曲线上最近点的权重。较大的权重会使最近点对拟合结果的影响更大。 curve_params.param.closest_point_sigma2最近点的方差。该参数用于计算曲线上最近点的方差。较小的方差会使最近点对拟合结果的影响更大。 curve_params.param.interior_sigma2内部点的方差。该参数用于计算曲线上内部点的方差。较小的方差会使内部点对拟合结果的影响更大。 curve_params.param.smooth_concavity平滑凹度。该参数用于调整曲线的平滑凹度。较大的值会使曲线更平滑。 curve_params.param.smoothness平滑度。该参数用于调整曲线的平滑度。较大的值会使曲线更平滑。 4 代码 #include pcl/point_cloud.h #include pcl/point_types.h #include pcl/io/pcd_io.h#include pcl/visualization/pcl_visualizer.h #include pcl/surface/on_nurbs/fitting_surface_tdm.h #include pcl/surface/on_nurbs/fitting_curve_2d_asdm.h #include pcl/surface/on_nurbs/triangulation.htypedef pcl::PointXYZ Point; std::ostringstream os;// 将点云数据中的有效点即非NaN值提取出来并以Eigen::Vector3d类型的形式保存起来 void PointCloud2Vector3d(pcl::PointCloudPoint::Ptr cloud, pcl::on_nurbs::vector_vec3d data) {for (unsigned i 0; i cloud-size(); i){Point p cloud-at(i);if(!std::isnan(p.x) !std::isnan(p.z) !std::isnan(p.z))data.push_back(Eigen::Vector3d(p.x, p.y, p.z));} }// 将ON_NurbsCurve和ON_NurbsSurface的曲线和控制点可视化显示在PCLVisualizer中方便用户观察和分析曲线的形状和控制点的位置。 void visualizeCurve (ON_NurbsCurve curve,ON_NurbsSurface surface,pcl::visualization::PCLVisualizer viewer) {// 将曲线转换为点云数据pcl::PointCloudpcl::PointXYZRGB::Ptr curve_cloud(new pcl::PointCloudpcl::PointXYZRGB);pcl::on_nurbs::Triangulation::convertCurve2PointCloud (curve, surface, curve_cloud, 4);//该函数会将曲线上的点均匀地采样并将采样点作为点云数据的点。// 可视化for(std::size_t i0; i curve_cloud-size() - 1; i){pcl::PointXYZRGB p1 curve_cloud-at(i);pcl::PointXYZRGB p2 curve_cloud-at(i1);os line i;viewer.removeShape(os.str());viewer.addLinepcl::PointXYZRGB(p1, p2, 1.0, 0.0, 0.0, os.str());}//pcl::PointCloudpcl::PointXYZRGB::Ptr curve_cps (new pcl::PointCloudpcl::PointXYZRGB);for(int i0; i curve.CVCount(); i){ON_3dPoint p1;curve.GetCV(i, p1); // 曲线的一个控制点double pnt[3];surface.Evaluate(p1.x ,p1.y, 0, 3, pnt); // 加usn曲面上对应的点的坐标pcl::PointXYZRGB p2;p2.x float (pnt[0]);p2.y float (pnt[1]);p2.z float (pnt[2]);p2.r 255;p2.g 0;p2.b 0;curve_cps-push_back (p2);}viewer.removePointCloud (cloud_cps);viewer.addPointCloud (curve_cps, cloud_cps); }int main() {pcl::visualization::PCLVisualizer viewer(B-spline surface fitting);viewer.setSize(800, 600);pcl::PCLPointCloud2 cloud2;pcl::PointCloudPoint::Ptr cloud(new pcl::PointCloudPoint);if(pcl::io::loadPCDFile(/home/lrj/work/pointCloudData/bun0.pcd, cloud2) -1)throw std::runtime_error( PCD file not found.);pcl::fromPCLPointCloud2(cloud2, *cloud);pcl::on_nurbs::NurbsDataSurface data;PointCloud2Vector3d(cloud, data.interior);pcl::visualization::PointCloudColorHandlerCustomPoint handler(cloud, 0, 255, 0);viewer.addPointCloudPoint(cloud, handler, cloud_cylinder);std::printf( %lu points in data set\n, cloud-size());// ############################################################################// fit B-spline surface/** 整个过程的目的是通过ON-Nurbs算法对给定的点云数据进行曲面拟合并将拟合结果以三角网格的形式可视化显示出来。* 通过多次细化和迭代逐步优化曲面拟合结果使其更加接近原始点云数据。*/// parametersunsigned order(3); // 曲面的阶数unsigned refinement(5); // 细化次数unsigned iterations(10); // 迭代次数unsigned mesh_resolution(256); // 网格分辨率pcl::on_nurbs::FittingSurface::Parameter params;params.interior_smoothness 0.2; // 内部平滑度params.interior_weight 1.0; // 内部权重params.boundary_smoothness 0.2; // 边界平滑度params.boundary_weight 0.0; // 边界权重// 生成初始的曲面拟合结果printf( surface fitting ...\n);ON_NurbsSurface nurbs pcl::on_nurbs::FittingSurface::initNurbsPCABoundingBox(order, data);pcl::on_nurbs::FittingSurface fit(data, nurbs);// fit.setQuiet (false); // enable/disable debug output// 将拟合结果转为三角网格并将其添加到可视化窗口进行现实pcl::PolygonMesh mesh;pcl::PointCloudpcl::PointXYZ::Ptr mesh_cloud(new pcl::PointCloudpcl::PointXYZ);std::vectorpcl::Vertices mesh_vertices;std::string mesh_id mesh_nurbs;pcl::on_nurbs::Triangulation::convertSurface2PolygonMesh(fit.m_nurbs, mesh, mesh_resolution);viewer.addPolygonMesh(mesh, mesh_id);// 进行多次曲面细化和求解for (unsigned i0; i refinement; i){fit.refine(0);fit.refine(1);fit.assemble(params);fit.solve();pcl::on_nurbs::Triangulation::convertSurface2Vertices (fit.m_nurbs, mesh_cloud, mesh_vertices, mesh_resolution); // 将曲面转为顶点数据viewer.updatePolygonMeshpcl::PointXYZ (mesh_cloud, mesh_vertices, mesh_id); // 视窗刷新以便观察到曲面拟合的过程viewer.spinOnce ();}// 进行一定次数的曲面拟合迭代for (unsigned i 0; i iterations; i){fit.assemble (params);fit.solve ();pcl::on_nurbs::Triangulation::convertSurface2Vertices (fit.m_nurbs, mesh_cloud, mesh_vertices, mesh_resolution);viewer.updatePolygonMeshpcl::PointXYZ (mesh_cloud, mesh_vertices, mesh_id);viewer.spinOnce();}// ############################################################################// fit B-spline curve/** 整个曲线拟合的过程的目的是使用ON-Nurbs算法对给定的点云数据进行曲线拟合并将拟合结果可视化显示出来。* 通过调整拟合参数可以控制拟合的精度和平滑度以得到最优的拟合结果。*/// parameterspcl::on_nurbs::FittingCurve2dAPDM::FitParameter curve_params;curve_params.addCPsAccuracy 5e-2; // 添加控制点的精度curve_params.addCPsIteration 3; // 添加控制点的迭代次数curve_params.maxCPs 200; // 最大控制点数curve_params.accuracy 1e-3; // 拟合的精度curve_params.iterations 100; // 迭代次数curve_params.param.closest_point_resolution 0; // 最近点的分辨率curve_params.param.closest_point_weight 1.0; // 最近点的权重curve_params.param.closest_point_sigma2 0.1; // 最近点的方差curve_params.param.interior_sigma2 0.00001; // 内部点的方差curve_params.param.smooth_concavity 1.0; // 平滑凹度curve_params.param.smoothness 1.0; // 平滑度// initialisation (circular)printf ( curve fitting ...\n);pcl::on_nurbs::NurbsDataCurve2d curve_data;curve_data.interior data.interior_param;curve_data.interior_weight_function.push_back (true);ON_NurbsCurve curve_nurbs pcl::on_nurbs::FittingCurve2dAPDM::initNurbsCurve2D (order, curve_data.interior);// curve fittingpcl::on_nurbs::FittingCurve2dASDM curve_fit (curve_data, curve_nurbs);// curve_fit.setQuiet (false); // enable/disable debug outputcurve_fit.fitting (curve_params);visualizeCurve (curve_fit.m_nurbs, fit.m_nurbs, viewer);// ############################################################################// triangulation of trimmed surfaceprintf ( triangulate trimmed surface ...\n);viewer.removePolygonMesh (mesh_id);pcl::on_nurbs::Triangulation::convertTrimmedSurface2PolygonMesh (fit.m_nurbs, curve_fit.m_nurbs, mesh,mesh_resolution); // 将拟合的曲面、曲线转为三角网格viewer.addPolygonMesh (mesh, mesh_id);// save trimmed B-spline surfaceif ( fit.m_nurbs.IsValid() ){ONX_Model model;ONX_Model_Object surf model.m_object_table.AppendNew();surf.m_object new ON_NurbsSurface(fit.m_nurbs);surf.m_bDeleteObject true;surf.m_attributes.m_layer_index 1;surf.m_attributes.m_name surface;ONX_Model_Object curv model.m_object_table.AppendNew();curv.m_object new ON_NurbsCurve(curve_fit.m_nurbs);curv.m_bDeleteObject true;curv.m_attributes.m_layer_index 2;curv.m_attributes.m_name trimming curve;// model.Write(file_3dm.c_str()); // printf( model saved: %s\n, file_3dm.c_str());}printf ( ... done.\n);viewer.spin();return 0; }
http://www.lebaoying.cn/news/64740.html

相关文章:

  • 国外网站会让国内人做吗许昌专业做企业网站的
  • 如何做自己的影视网站腾讯云cdn配置wordpress
  • 服务器上面建设网站西安网站网络营销
  • 上海网站建设维护网站新建设请示
  • 网站建设后期需要后期做的宝塔网站建设
  • 品牌理念设计企业网站建设快速搭建网站模板
  • 合肥网站制作公司wordpress新建php页面模板
  • 东莞网站建设 硅胶wordpress有多强大
  • 有用element做网站的wordpress king主题
  • 如何查看网站用什么代码做的做微信商城网站哪家好
  • 企业邮箱登录入口和注册申请什么叫seo网站推广
  • 快递网站策划怎么做ppt怎么修改WordPress为中文
  • 个人网站 服务器自适应营销网站模板
  • 建设网站dns如何设置购物网站项目简介
  • 安徽网站建设的基本步骤网站tag作用
  • 中国比较有名的外贸公司新塘网站seo优化
  • 网站添加缩略图网站放音乐代码
  • 360浏览器打不开90设计网站有什么做公众号封面图的网站
  • 网站导航条图片素材山东省城乡建设部网站首页
  • 后台原网站被转接百度商店应用市场
  • 信息产业部 备案网站局域网下怎么访问自己做的网站
  • 摄影图片网站网站开发与维护是什么
  • 网题 做问卷的网站网站meta网页描述
  • access 数据库做网站优化系统设置
  • cms系统做漫画网站织梦做的网站怎么上传视频教程
  • 自建网站的缺点浏览器显示不安全网站建设
  • 赤峰城乡建设局网站台州网站排名优化
  • 网站用什么主机经三路专业做网站
  • 信阳做房产哪个网站好用wordpress 询价按钮
  • 网站备案去哪注销想做一个自己设计公司的网站怎么做