grad.cpp 846 B

12345678910111213141516171819202122232425262728
  1. #include <test_common.h>
  2. #include <igl/grad.h>
  3. #include <igl/triangulated_grid.h>
  4. #include <igl/edge_lengths.h>
  5. #include <igl/cotmatrix.h>
  6. #include <igl/doublearea.h>
  7. #include <igl/EPS.h>
  8. TEST_CASE("grad: laplace_grid", "[igl]")
  9. {
  10. Eigen::MatrixXd V2;
  11. Eigen::MatrixXi F;
  12. igl::triangulated_grid(3,3,V2,F);
  13. Eigen::MatrixXd V = Eigen::MatrixXd::Zero(V2.rows(),3);
  14. V.topLeftCorner(V2.rows(),2) = V2;
  15. V.col(2) = V.col(1).array() * V.col(0).array() + V.col(1).array();
  16. Eigen::SparseMatrix<double> L;
  17. igl::cotmatrix(V,F,L);
  18. Eigen::SparseMatrix<double> G;
  19. igl::grad(V,F,G);
  20. Eigen::VectorXd dblA;
  21. igl::doublearea(V,F,dblA);
  22. Eigen::SparseMatrix<double> GTAG =
  23. G.transpose() * (dblA.colwise().replicate(3).asDiagonal()) * G;
  24. test_common::assert_near(
  25. Eigen::MatrixXd(L),Eigen::MatrixXd(-0.5*GTAG),igl::EPS<double>());
  26. }