почему упрощение сетки CGAL занимает так много времени

#mesh #cgal #simplification

#меш #cgal #упрощение

Вопрос:

Я пытаюсь использовать упрощение сетки с триангулированной поверхностью cgal. Я использовал упрощение Гарланда и Хекберта, чтобы упростить свою сетку, но это занимает так много времени. Мои данные имеют 50000 nv, 165883 ne и 109521 nf, для чего требуется почти 30 минут с 0,2 stop_ratio. Разумна ли стоимость выполнения? Я также проверяю, допустима ли входная сетка, используя CGAL::is_valid_polygon_mesh. Это действительно так. как я могу решить эту проблему? Огромное спасибо…

стоимость выполнения сетки с 165883 ребрами

стоимость выполнения сетки с 8282 ребрами

 enter code here  
 #include lt;fstreamgt; #include lt;iostreamgt; #include lt;iteratorgt; #include lt;vectorgt; #include "gltf-loader.h" #define TINYGLTF_NO_STB_IMAGE_WRITE #define TINYGLTF_IMPLEMENTATION #define STB_IMAGE_IMPLEMENTATION #define STB_IMAGE_WRITE_IMPLEMENTATION #include "tiny_gltf.h"  #include lt;CGAL/Exact_predicates_inexact_constructions_kernel.hgt; #include lt;CGAL/Simple_cartesian.hgt; #include lt;CGAL/Surface_mesh.hgt; #include lt;CGAL/draw_surface_mesh.hgt; #include lt;CGAL/draw_polygon_2.hgt;  #include lt;CGAL/Polygon_mesh_processing/repair.hgt; #include lt;CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.hgt; #include lt;CGAL/boost/graph/iterator.hgt; #include lt;CGAL/Polygon_2.hgt;  #include lt;CGAL/Surface_mesh_simplification/edge_collapse.hgt; #include lt;CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.hgt; #include lt;CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Bounded_normal_change_placement.hgt; #include lt;CGAL/Surface_mesh_simplification/Policies/Edge_collapse/GarlandHeckbert_policies.hgt; #include lt;CGAL/Polyhedron_3.hgt; #include lt;CGAL/Polygon_mesh_processing/stitch_borders.hgt; #include lt;chronogt; #include lt;vectorgt;   using namespace example;  namespace PMP = CGAL::Polygon_mesh_processing; namespace NP = CGAL::parameters; //typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Simple_cartesianlt;doublegt; K;  typedef CGAL::Surface_meshlt;K::Point_3gt; CGAL_Mesh; typedef CGAL_Mesh::Vertex_index vertex_descriptor; typedef CGAL_Mesh::Face_index face_descriptor; namespace SMS = CGAL::Surface_mesh_simplification; CGAL_Mesh inital_mesh;   const char* filename = "C:\Users\Administrator\source\repos\CMakeProject4\CMakeProject4\input.off";      if (!PMP::IO::read_polygon_mesh(filename, inital_mesh) || CGAL::is_empty(inital_mesh))  {  std::cerr lt;lt; "Invalid input." lt;lt; std::endl;  return 1;  }   std::chrono::steady_clock::time_point start_time = std::chrono::steady_clock::now();  double stop_ratio = 0.2;   std::cout lt;lt; "start edge collages." lt;lt; std::endl;  SMS::Count_ratio_stop_predicatelt;CGAL_Meshgt; stop(stop_ratio);   typedef typename SMS::GarlandHeckbert_policieslt;CGAL_Mesh, Kgt; GH_policies;  typedef typename GH_policies::Get_cost GH_cost;  typedef typename GH_policies::Get_placement GH_placement;  typedef SMS::Bounded_normal_change_placementlt;GH_placementgt; Bounded_GH_placement;     bool check_mesh = CGAL::is_valid_polygon_mesh(inital_mesh);  std::cout lt;lt; "vaild or in valid" lt;lt;check_meshlt;lt; std::endl;  GH_policies gh_policies(inital_mesh);  const GH_costamp; gh_cost = gh_policies.get_cost();  const GH_placementamp; gh_placement = gh_policies.get_placement();  Bounded_GH_placement placement(gh_placement);   std::cout lt;lt; "Input mesh has " lt;lt; num_vertices(inital_mesh) lt;lt; " nv "lt;lt; num_edges(inital_mesh) lt;lt; " ne "  lt;lt; num_faces(inital_mesh) lt;lt; " nf" lt;lt; std::endl;  /*internal::cgal_enable_sms_trace = true;*/  int r = SMS::edge_collapse(inital_mesh, stop,  CGAL::parameters::get_cost(gh_cost)  .get_placement(placement));      

Комментарии:

1. Не могли бы вы привести минимальный пример, показывающий вашу проблему? Ожидаемое время выполнения должно составлять несколько секунд. Заканчивается ли это?

2. @sloriot , я обновляю свой код и стоимость выполнения двух mesh. Проект может соблазнить. Я знаю,что время выполнения должно составлять несколько секунд, но я не знаю, почему мой проект занимает так много времени.

3. Вы компилировали в режиме выпуска без утверждений, верно? Можете ли вы поделиться информацией, которая занимает много времени, чтобы я мог попытаться воспроизвести проблему?

4. Большое вам спасибо!! Ты напоминаешь мне. Я использовал режим отладки. Проблема решена. @sloriot