123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include <test_common.h>
- #include <CGAL/Simple_cartesian.h>
- #include <igl/copyleft/cgal/hausdorff.h>
- #include <igl/copyleft/cgal/point_mesh_squared_distance.h>
- #include <igl/upsample.h>
- TEST_CASE("hausdorff: knightVScheburashka", "[igl/copyleft/cgal]")
- {
- Eigen::MatrixXd VA,VB;
- Eigen::MatrixXi FA,FB;
- test_common::load_mesh("decimated-knight.obj", VA, FA);
- test_common::load_mesh("cheburashka.off", VB, FB);
- //typedef CGAL::Epeck Kernel;
- typedef CGAL::Simple_cartesian<double> Kernel;
- CGAL::AABB_tree<
- CGAL::AABB_traits<Kernel,
- CGAL::AABB_triangle_primitive<Kernel,
- typename std::vector<CGAL::Triangle_3<Kernel> >::iterator
- >
- >
- > treeB;
- std::vector<CGAL::Triangle_3<Kernel> > TB;
- {
- igl::copyleft::cgal::point_mesh_squared_distance_precompute(VB,FB,treeB,TB);
- }
- std::vector<Eigen::VectorXd> U(5);
- for(int j = 0;j<U.size();j++)
- {
- if(j>0)
- {
- igl::upsample(Eigen::MatrixXd(VA),Eigen::MatrixXi(FA),VA,FA);
- }
- const int m = FA.rows();
- U[j].resize(m);
- for(int i = 0;i<m;i++)
- {
- Eigen::MatrixXd Vi(3,3);
- Vi<<VA.row(FA(i,0)),VA.row(FA(i,1)),VA.row(FA(i,2));
- double l;
- igl::copyleft::cgal::hausdorff(Vi,treeB,TB,l,U[j](i));
- if(j>0&&i%4==3)
- {
- double u4 = std::numeric_limits<double>::infinity();
- for(int u = 0;u<4;u++)
- {
- u4 = std::min(u4,U[j](i-u));
- }
- REQUIRE (U[j-1](i/4) >= u4);
- }
- }
- break;
- }
- }
|