You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.5 KiB
54 lines
1.5 KiB
#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;
|
|
igl::read_triangle_mesh(test_common::data_path("decimated-knight.obj"), VA, FA);
|
|
igl::read_triangle_mesh(test_common::data_path("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;
|
|
}
|
|
}
|
|
|