cubic_split.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #include <test_common.h>
  2. #include <igl/cubic_split.h>
  3. TEST_CASE("cubic_split: simple", "[igl]" )
  4. {
  5. {
  6. Eigen::Matrix<double,4,2> C;
  7. C << 0,0,
  8. 1,1,
  9. 2,-1,
  10. 3,0;
  11. double t = 0.5;
  12. Eigen::RowVector2d C01,C012,C0123,C123,C23;
  13. igl::cubic_split(C,t,C01,C012,C0123,C123,C23);
  14. // C01 = (0.5,0.5)
  15. // C012 = (1.0,0.25)
  16. // C0123 = (1.5,0.0)
  17. // C123 = (2.0,-0.25)
  18. // C23 = (2.5,-0.5)
  19. REQUIRE( C01.isApprox( Eigen::RowVector2d(0.5,0.5) ) );
  20. REQUIRE( C012.isApprox( Eigen::RowVector2d(1.0,0.25) ) );
  21. REQUIRE( C0123.isApprox( Eigen::RowVector2d(1.5,0.0) ) );
  22. REQUIRE( C123.isApprox( Eigen::RowVector2d(2.0,-0.25) ) );
  23. REQUIRE( C23.isApprox( Eigen::RowVector2d(2.5,-0.5) ) );
  24. Eigen::Matrix<double,4,2> C1,C2;
  25. igl::cubic_split(C,t,C1,C2);
  26. REQUIRE( C1.row(0).isApprox( C.row(0) ) );
  27. REQUIRE( C1.row(1).isApprox( C01 ) );
  28. REQUIRE( C1.row(2).isApprox( C012 ) );
  29. REQUIRE( C1.row(3).isApprox( C0123 ) );
  30. REQUIRE( C2.row(0).isApprox( C0123 ) );
  31. REQUIRE( C2.row(1).isApprox( C123 ) );
  32. REQUIRE( C2.row(2).isApprox( C23 ) );
  33. REQUIRE( C2.row(3).isApprox( C.row(3) ) );
  34. }
  35. }