diff --git a/tutorial/306_EigenDecomposition/CMakeLists.txt b/tutorial/306_EigenDecomposition/CMakeLists.txt new file mode 100644 index 000000000..f31cc01e9 --- /dev/null +++ b/tutorial/306_EigenDecomposition/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 2.6) +project(306_EigenDecomposition) + +include("../CMakeLists.shared") + +set(SOURCES +${PROJECT_SOURCE_DIR}/main.cpp +) + +add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES}) +target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES}) diff --git a/tutorial/306_EigenDecomposition/main.cpp b/tutorial/306_EigenDecomposition/main.cpp new file mode 100644 index 000000000..b77d78ba8 --- /dev/null +++ b/tutorial/306_EigenDecomposition/main.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +Eigen::MatrixXd V,U; +Eigen::MatrixXi F; +int c=0; +double bbd = 1; +bool twod = 0; +int main(int argc, char * argv[]) +{ + using namespace Eigen; + using namespace std; + using namespace igl; + VectorXd D; + if(!read_triangle_mesh("../shared/beetle.off",V,F)) + { + cout<<"failed to load mesh"< L,M; + cotmatrix(V,F,L); + L = (-L).eval(); + massmatrix(V,F,MASSMATRIX_TYPE_DEFAULT,M); + const size_t k = 5; + if(!eigs(L,M,k+1,EIGS_TYPE_SM,U,D)) + { + cout<<"failed."<bool + { + switch(key) + { + default: + return false; + case ' ': + { + U = U.rightCols(k).eval(); + // Rescale eigen vectors for visualization + VectorXd Z = + bbd*0.5*U.col(c); + Eigen::MatrixXd C; + igl::parula(U.col(c).eval(),false,C); + c = (c+1)%U.cols(); + if(twod) + { + V.col(2) = Z; + } + viewer.data.set_mesh(V,F); + viewer.data.compute_normals(); + viewer.data.set_colors(C); + return true; + } + } + }; + viewer.callback_key_down(viewer,' ',0); + viewer.core.show_lines = false; + viewer.launch(); +} diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt index 612da5873..cb898d5cb 100644 --- a/tutorial/CMakeLists.txt +++ b/tutorial/CMakeLists.txt @@ -77,6 +77,7 @@ add_subdirectory("302_Sort") add_subdirectory("303_LaplaceEquation") add_subdirectory("304_LinearEqualityConstraints") add_subdirectory("305_QuadraticProgramming") +add_subdirectory("306_EigenDecomposition") # Chapter 4 add_subdirectory("401_BiharmonicDeformation") diff --git a/tutorial/shared/beetle.off.REMOVED.git-id b/tutorial/shared/beetle.off.REMOVED.git-id new file mode 100644 index 000000000..67188c17e --- /dev/null +++ b/tutorial/shared/beetle.off.REMOVED.git-id @@ -0,0 +1 @@ +565ca529a5b159e79a9afed0973091c55b942f9f \ No newline at end of file diff --git a/tutorial/tutorial.html.REMOVED.git-id b/tutorial/tutorial.html.REMOVED.git-id index 61b8e85c3..eaa4c8671 100644 --- a/tutorial/tutorial.html.REMOVED.git-id +++ b/tutorial/tutorial.html.REMOVED.git-id @@ -1 +1 @@ -918f18e58f2b05bc303ee3b08c8b57178bd816e6 \ No newline at end of file +d33e7bea8bd2af6f2a712fee53098e93ae9e5f5d \ No newline at end of file diff --git a/tutorial/tutorial.md.REMOVED.git-id b/tutorial/tutorial.md.REMOVED.git-id index bd8a4325f..a8ffb75fb 100644 --- a/tutorial/tutorial.md.REMOVED.git-id +++ b/tutorial/tutorial.md.REMOVED.git-id @@ -1 +1 @@ -d01b1d08eed6f827504ca91822bfa23543c7858d \ No newline at end of file +ad07b355eec052eaa2e00fd6d5daaf5120689ad7 \ No newline at end of file