triangle_triangle_intersect.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "test_common.h"
  2. #include <igl/predicates/triangle_triangle_intersect.h>
  3. TEST_CASE("triangle_triangle_intersect intersect", "[igl/predicates]")
  4. {
  5. // try with oblique interecion plane
  6. for(double shift=-1000;shift<=1000;shift+=100.0)
  7. {
  8. Eigen::RowVector3d p1(0,0,0), q1(1,0,0),r1(0,1,0);
  9. Eigen::RowVector3d p2(shift,0,1),q2(1,1,0),r2(-shift,0,-1);
  10. bool coplanar;
  11. REQUIRE( igl::predicates::triangle_triangle_intersect(p1,q1,r1, p2,q2,r2,coplanar));
  12. }
  13. }
  14. TEST_CASE("triangle_triangle_intersect not intersect", "[igl/predicates]")
  15. {
  16. // positive test that two triangles intersect
  17. Eigen::RowVector3d p1(0,0,0),q1(1,0,0),r1(0,1,0);
  18. Eigen::RowVector3d p2(0,0,1),q2(1,0,1),r2(0,1,1);
  19. bool coplanar;
  20. REQUIRE( !igl::predicates::triangle_triangle_intersect(p1,q1,r1,p2,q2,r2,coplanar) );
  21. }
  22. TEST_CASE("triangle_triangle_intersect coplanar", "[igl/predicates]")
  23. {
  24. // positive test that two triangles intersect
  25. Eigen::RowVector3d p1(0,0,0),q1(1,0,0),r1(0,1,0);
  26. Eigen::RowVector3d p2(0,0,0),q2(0.5,0,0),r2(0,0.5,0);
  27. // should intersect along the vector (0,0,0) -> (sqrt(2),sqrt(2),0)
  28. bool coplanar;
  29. REQUIRE( igl::predicates::triangle_triangle_intersect(p1,q1,r1,p2,q2,r2,coplanar) );
  30. REQUIRE( coplanar );
  31. }
  32. TEST_CASE("triangle_triangle_intersect: non-intersecting", "[igl]")
  33. {
  34. Eigen::Matrix<double,Eigen::Dynamic,3> V(6,3);
  35. V<<
  36. 0.39234799146652199,0.38443601131439198,0.44744500517845198,
  37. 0.38924700021743752,0.385637506842613,0.45762349665164948,
  38. 0.38700349628925301,0.38789276033639897,0.45634675025939975,
  39. 0.39079749584197976,0.38503675907850249,0.45253425091505073,
  40. 0.38769650459289529,0.38623825460672351,0.46271274238824822,
  41. 0.39279749989509577,0.37299175560474374,0.45553924888372399;
  42. Eigen::MatrixXi F(2,3);
  43. F<<
  44. 0,3,2,
  45. 1,5,4;
  46. bool coplanar;
  47. REQUIRE(!igl::predicates::triangle_triangle_intersect(
  48. V.row(F(0,0)).eval(),
  49. V.row(F(0,1)).eval(),
  50. V.row(F(0,2)).eval(),
  51. V.row(F(1,0)).eval(),
  52. V.row(F(1,1)).eval(),
  53. V.row(F(1,2)).eval(),
  54. coplanar));
  55. }
  56. TEST_CASE("triangle_triangle_intersect: coplanar", "[igl]")
  57. {
  58. Eigen::Matrix<double,Eigen::Dynamic,3> V(6,3);
  59. V<<
  60. 0.30947001278400399,0.80785250663757346,0.47595100104808802,
  61. 0.299046009778976,0.79801350831985496,0.47843150794506101,
  62. 0.32418551295995701,0.79794725775718722,0.48203899711370451,
  63. 0.30425801128148999,0.80293300747871421,0.47719125449657451,
  64. 0.31897351145744302,0.79302775859832797,0.48327925056219101,
  65. 0.31376150995492902,0.78810825943946872,0.4845195040106775;
  66. Eigen::MatrixXi F(2,3);
  67. F<<
  68. 0,4,2,
  69. 1,5,3;
  70. bool coplanar;
  71. REQUIRE(!igl::predicates::triangle_triangle_intersect(
  72. V.row(F(0,0)).eval(),
  73. V.row(F(0,1)).eval(),
  74. V.row(F(0,2)).eval(),
  75. V.row(F(1,0)).eval(),
  76. V.row(F(1,1)).eval(),
  77. V.row(F(1,2)).eval(),coplanar));
  78. }