signed_distance.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <test_common.h>
  2. #include <igl/signed_distance.h>
  3. TEST_CASE("signed_distance: single_tet", "[igl]")
  4. {
  5. Eigen::MatrixXd V(4,3);
  6. V<<
  7. 0,0,0,
  8. 1,0,0,
  9. 0,1,0,
  10. 0,0,1;
  11. Eigen::MatrixXi F(4,3);
  12. F<<
  13. 0,1,3,
  14. 0,2,1,
  15. 0,3,2,
  16. 1,2,3;
  17. Eigen::MatrixXd P(1,3);
  18. P<<0.5,0.5,0.5;
  19. for(const igl::SignedDistanceType type :
  20. {
  21. igl::SIGNED_DISTANCE_TYPE_PSEUDONORMAL ,
  22. igl::SIGNED_DISTANCE_TYPE_WINDING_NUMBER,
  23. igl::SIGNED_DISTANCE_TYPE_DEFAULT ,
  24. igl::SIGNED_DISTANCE_TYPE_UNSIGNED })
  25. {
  26. Eigen::VectorXd S;
  27. Eigen::VectorXi I;
  28. Eigen::MatrixXd C,N;
  29. igl::signed_distance( P,V,F,type,S,I,C,N);
  30. Eigen::VectorXd Sexact (1,1);Sexact<<sqrt(1./12.);
  31. test_common::assert_near(S,Sexact,1e-15);
  32. }
  33. }
  34. TEST_CASE("signed_distance: single_triangle", "[igl]")
  35. {
  36. Eigen::MatrixXd V(3,2);
  37. V<<
  38. 0,0,
  39. 1,0,
  40. 0,1;
  41. Eigen::MatrixXi F(3,2);
  42. F<<
  43. 0,1,
  44. 1,2,
  45. 2,0;
  46. Eigen::MatrixXd P(1,2);
  47. P<<1,1;
  48. for(const igl::SignedDistanceType type :
  49. {
  50. igl::SIGNED_DISTANCE_TYPE_PSEUDONORMAL ,
  51. igl::SIGNED_DISTANCE_TYPE_WINDING_NUMBER,
  52. igl::SIGNED_DISTANCE_TYPE_DEFAULT ,
  53. igl::SIGNED_DISTANCE_TYPE_UNSIGNED
  54. })
  55. {
  56. Eigen::VectorXd S;
  57. Eigen::VectorXi I;
  58. Eigen::MatrixXd C,N;
  59. igl::signed_distance( P,V,F,type,S,I,C,N);
  60. Eigen::VectorXd Sexact (1,1);Sexact<<sqrt(2.)/2.;
  61. test_common::assert_near(S,Sexact,1e-15);
  62. }
  63. }