#include #include #include #include #include #include #include #include #include #include TEST(intrinsic_delaunay_triangulation, two_triangles) { const Eigen::MatrixXd V = (Eigen::MatrixXd(4,2)<< 0,12, 1,0, 1,20, 2,9).finished(); const Eigen::MatrixXi FN = (Eigen::MatrixXi(2,3)<< 0,1,2, 2,1,3).finished(); Eigen::MatrixXd lN; igl::edge_lengths(V,FN,lN); Eigen::MatrixXd l; Eigen::MatrixXi F; igl::intrinsic_delaunay_triangulation( lN, FN, l, F); Eigen::MatrixXd lext; igl::edge_lengths(V,F,lext); test_common::assert_near(l,lext,1e-10); } TEST(intrinsic_delaunay_triangulation, skewed_grid) { Eigen::MatrixXd V; Eigen::MatrixXi F_in; igl::triangulated_grid(4,4,V,F_in); // Skew against diagonal direction V.col(0) -= 1.5*V.col(1); Eigen::MatrixXd l_in; igl::edge_lengths(V,F_in,l_in); Eigen::MatrixXd l; Eigen::MatrixXi F; igl::intrinsic_delaunay_triangulation( l_in, F_in, l, F); Eigen::MatrixXd lext; igl::edge_lengths(V,F,lext); test_common::assert_near(l,lext,1e-10); Eigen::Matrix D; igl::is_delaunay(V,F,D); const Eigen::Matrix Dtrue = Eigen::Matrix::Constant(F.rows(),F.cols(),true); test_common::assert_eq(D,Dtrue); } TEST(intrinsic_delaunay_triangulation, peaks) { Eigen::MatrixXd V2; Eigen::MatrixXi F_in; igl::triangulated_grid(6,6,V2,F_in); Eigen::MatrixXd V(V2.rows(),3); for(int v=0;v > uE2E; igl::intrinsic_delaunay_triangulation( l_in, F_in, l, F, E, uE, EMAP, uE2E); //Eigen::MatrixXd lext; //igl::edge_lengths(V,F,lext); //std::cout< D; const Eigen::Matrix D_gt = Eigen::Matrix::Constant(F.rows(),F.cols(),true); igl::is_intrinsic_delaunay(l,F,uE2E,D); test_common::assert_eq(D,D_gt); //{ // Eigen::MatrixXi Fu; // Eigen::VectorXi IA,IC; // igl::unique_simplices(F,Fu,IA,IC); // ASSERT_EQ(F.rows(),Fu.rows()); //} // Input better have started manifold, otherwise this test doesn't make sense //assert(igl::is_edge_manifold(F_in)); //ASSERT_TRUE(igl::is_edge_manifold(F)); } //// Not sure if this is a good test... Even though the edge will exist twice //the intrinsic triangles on either edge are different... //TEST(intrinsic_delaunay_triangulation,unflippable_tet) //{ // const Eigen::MatrixXd V = (Eigen::MatrixXd(4,3)<< // 10, 4,7, // 5, 9,0, // 8, 8,8, // 1,10,9).finished(); // const Eigen::MatrixXi F_in = (Eigen::MatrixXi(4,3)<< // 0,1,2, // 0,2,3, // 0,3,1, // 1,3,2).finished(); // const Eigen::Matrix Dgt = // (Eigen::Matrix(4,3)<< // 1,1,1, // 1,0,1, // 1,1,0, // 1,1,1).finished(); // Eigen::Matrix D; // Eigen::MatrixXd l_in; // igl::edge_lengths(V,F_in,l_in); // igl::is_intrinsic_delaunay(l_in,F_in,D); // test_common::assert_eq(D,Dgt); // Eigen::MatrixXd l; // Eigen::MatrixXi F; // igl::intrinsic_delaunay_triangulation( l_in, F_in, l, F); // // Nothing should have changed: no edges are flippable. // test_common::assert_eq(F,F_in); // test_common::assert_eq(l,l_in); //}