├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── LICENSE ├── README.md ├── cmake ├── FindLIBIGL.cmake └── libigl.cmake ├── data ├── beetle-scalar-field.dmat ├── beetle.obj ├── lucy-noisy.obj ├── max-noisy.obj └── sphere-noisy.obj ├── images ├── beetle-data-denoising.gif ├── hat-function-gradient.pdf ├── hat-function-gradient.png ├── hat-function.pdf ├── hat-function.png ├── plane-smooth-data.gif ├── plane-smooth-geometry.gif ├── sphere-geometric-smoothing.gif └── voronoi-neighborhood.ai ├── include ├── cotmatrix.h ├── massmatrix.h └── smooth.h ├── main.cpp ├── src ├── cotmatrix.cpp ├── massmatrix.cpp └── smooth.cpp └── tex ├── 00e14c64b601ac983b4364aa60fa1dc6.svg ├── 01f40bdda54d9ab256ddd5e9a04e371b.svg ├── 04c2c8b27440c9aea318748e3a1a9ceb.svg ├── 04fdc9ebe2a4f15ffdd732d0abd189e1.svg ├── 06e8e88b4ac31efcc03ecf253f9609ba.svg ├── 0e51a2dede42189d77627c4d742822c3.svg ├── 151577143ba9b968bc58f486847c5246.svg ├── 1676aad3b697e1ce24e6fdf9e3b80555.svg ├── 1837a3ba67cc7b4f946656323866bfcb.svg ├── 190083ef7a1625fbc75f243cffb9c96d.svg ├── 191fb656c7f4f20997cf240f7af26caf.svg ├── 193e99dd587ecc23cdd8853e4cd46a76.svg ├── 1a693d20e239e8c342dd2a059e9770c6.svg ├── 1b109d8b4484cf614f27126d788c510e.svg ├── 1c899e1c767eb4eac89facb5d1f2cb0d.svg ├── 2103cd36ae87c74dbd5cf1297f2bb1da.svg ├── 21d2cb0fed44339d6eb9fd1c6788522f.svg ├── 26eb59da31fb48cb17abfe4c6dc80375.svg ├── 2781fb506c10958a89548aa070f15594.svg ├── 289bc3c68d369342d98da6ff43ec5b9f.svg ├── 2ad9d098b937e46f9f58968551adac57.svg ├── 2b41e5149bbd9bd2a0b7170924be9b80.svg ├── 2dfa893f7bf3c5c01ceb4788da782da0.svg ├── 31fae8b8b78ebe01cbfbe2fe53832624.svg ├── 32bab51d0ad9d94ce1fe47d67e452dbb.svg ├── 36b5afebdba34564d884d347484ac0c7.svg ├── 36f9bbd82b66589fd9772b7889d95932.svg ├── 40cb87da7035dbcd178fcf1363089dfc.svg ├── 4148b1898d976255af11ef4509e668c1.svg ├── 45f257d25bb292b0f5b8a984f4efbe84.svg ├── 461fd2586080bcfe7ac91515a525affe.svg ├── 4813491b0a749868771cab60ce88649f.svg ├── 4870d18d47ab6d0e32510c4b1ccf4927.svg ├── 48f326d21a7a528a0f1aeb6a90755416.svg ├── 4bdc180d4843f731cfac9a4b56ba3366.svg ├── 4f16a031aba6bcb3e69a09759c051f29.svg ├── 520957eebcbc4341addf55ec1a6ef0ab.svg ├── 53d147e7f3fe6e47ee05b88b166bd3f6.svg ├── 5435f08c809898be0b38d31c7232e2af.svg ├── 545994479b8eb0934d80a97627e63f82.svg ├── 5509cfc59c55cd5354fd80489e2d1a13.svg ├── 55a049b8f161ae7cfeb0197d75aff967.svg ├── 58bea700f9fd133dfde44969079927c0.svg ├── 58e56656e6e782a9941daf494e8471eb.svg ├── 5a6a7ddb47dbe4427df2767dd2254d3c.svg ├── 5d53591a59f665c794e0a2f859142b53.svg ├── 5e025aa9bc7c6818199db0d8fb82bd3e.svg ├── 5e5d7941135a825fa8ab551e0eb76a4f.svg ├── 61e84f854bc6258d4108d08d4c4a0852.svg ├── 6ac64257e8429516f022faf3750898f9.svg ├── 6c4adbc36120d62b98deef2a20d5d303.svg ├── 6d22be1359e204374e6f0b45e318d561.svg ├── 6dbb78540bd76da3f1625782d42d6d16.svg ├── 741ed3ef6a246c4afd8317583b95f093.svg ├── 74341d0452aa58e0f8653b6058b1f3f6.svg ├── 74a93b9b98af7c7b321f354c4fcf8ea2.svg ├── 77a3b857d53fb44e33b53e4c8b68351a.svg ├── 7a676caa07476cecc1fef337bd6a860e.svg ├── 7d9f97a055843950ec03bc359085c06e.svg ├── 80637df1ca7533740cc7b3fdd1ab540b.svg ├── 84df98c65d88c6adf15d4645ffa25e47.svg ├── 8c168fd96735d211e2c39766d370606a.svg ├── 8fc2ed1e8ffd9008ef2661b89ca5b616.svg ├── 902505b1f10837bf329ffbeb68762c74.svg ├── 940aebca1f028d93419529cff94a740a.svg ├── 965b9779f7d35773b987d1080ab428e9.svg ├── 99e92f13a02d606f5ce1fd991794f828.svg ├── 9f8210836fb3ca3da88e84938171d18f.svg ├── a69ec5fa9866f2be8caf1efd6fdc8d11.svg ├── a72b56a59ffa2be52208086ccb6f7562.svg ├── ad301946877f66beddd043039f1845d9.svg ├── af94b55c890d07e5e8a5cbccff7647c0.svg ├── b0ea07dc5c00127344a1cad40467b8de.svg ├── b135eeed3e8770ac50d05128df513462.svg ├── b95c2b0aab2482e5bebd25332a4bbde0.svg ├── bb23bb09b67bb167730c76ff706043de.svg ├── bd842203a257378897dd2d2499081e97.svg ├── c317e35fe20ee616ed6678d04169794b.svg ├── c6bcca8f259a226ca0748027158124bd.svg ├── c6f234133df83b61064c6cdda4c75eb8.svg ├── ca2a12218ffab9d11bc2166ed9ad9083.svg ├── d0cc021c5b0e6847b9929fd5c6ecd826.svg ├── d4fecafea88cb244ca98be86cb2bb526.svg ├── ddd3bc35b936d6a00e6a81cab0061f32.svg ├── dde8778be23b02252fad310beca5f28a.svg ├── e0563ab36735bded51644cf89825f1d2.svg ├── e0b10549ef06a4ad5f8b1880b7d31832.svg ├── e6bb22a58889cb2e58f4fce2f3a80e02.svg ├── e7299099834dc07da267043c72b8955e.svg ├── e81a1a11e934fd54074805470b4f9ad1.svg ├── e8b064f3dd720aa90964378e9d8b8f47.svg ├── e94a6a9790d776ead8b76d74b10cc90f.svg ├── e9b8736a9aa66b1921af8ad5a22571df.svg ├── eb0a14f1824b0e6901ad51c2b68e8ee7.svg ├── eb367462f49f6165b7702489cd3ad4ea.svg ├── eb62325152b7dd734820edcdd33d2950.svg ├── f09d1063c8d652ad8acdd78ea9db81f3.svg ├── f708fca18bc40e08e6d26508a0f46968.svg ├── f918be183bda0a2a6d22fe2690f24395.svg └── fd7c3eb33987d32e5867ff7bb1cacb55.svg /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | *.smod 19 | 20 | # Compiled Static libraries 21 | *.lai 22 | *.la 23 | *.a 24 | *.lib 25 | 26 | # Executables 27 | *.exe 28 | *.out 29 | *.app 30 | 31 | *.un~ 32 | *.swo 33 | *.swp 34 | build/* 35 | *.DS_Store 36 | solution/*.cpp 37 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/.gitmodules -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(smoothing) 3 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 4 | 5 | ### libIGL options: choose between header only and compiled static library 6 | option(LIBIGL_USE_STATIC_LIBRARY "Use libigl as static library" OFF) 7 | option(LIBIGL_GLFW "Use GLFW" ON) 8 | 9 | include(libigl) 10 | 11 | # Add your project files 12 | include_directories("include/") 13 | if(USE_SOLUTION) 14 | file(GLOB SRCFILES solution/*.cpp) 15 | else() 16 | file(GLOB SRCFILES src/*.cpp) 17 | endif() 18 | 19 | add_library(core ${SRCFILES}) 20 | target_link_libraries(core igl::core igl::glfw ) 21 | 22 | add_executable(smoothing "main.cpp") 23 | target_link_libraries(smoothing core igl::core igl::opengl igl::glfw ) 24 | -------------------------------------------------------------------------------- /cmake/FindLIBIGL.cmake: -------------------------------------------------------------------------------- 1 | # - Try to find the LIBIGL library 2 | # Once done this will define 3 | # 4 | # LIBIGL_FOUND - system has LIBIGL 5 | # LIBIGL_INCLUDE_DIR - **the** LIBIGL include directory 6 | if(LIBIGL_FOUND) 7 | return() 8 | endif() 9 | 10 | find_path(LIBIGL_INCLUDE_DIR igl/readOBJ.h 11 | HINTS 12 | ENV LIBIGL 13 | ENV LIBIGLROOT 14 | ENV LIBIGL_ROOT 15 | ENV LIBIGL_DIR 16 | PATHS 17 | ${CMAKE_SOURCE_DIR}/../.. 18 | ${CMAKE_SOURCE_DIR}/.. 19 | ${CMAKE_SOURCE_DIR} 20 | ${CMAKE_SOURCE_DIR}/libigl 21 | ${CMAKE_SOURCE_DIR}/../libigl 22 | ${CMAKE_SOURCE_DIR}/../../libigl 23 | /usr 24 | /usr/local 25 | /usr/local/igl/libigl 26 | PATH_SUFFIXES include 27 | ) 28 | 29 | include(FindPackageHandleStandardArgs) 30 | find_package_handle_standard_args(LIBIGL 31 | "\nlibigl not found --- You can download it using:\n\tgit clone --recursive https://github.com/libigl/libigl.git ${CMAKE_SOURCE_DIR}/../libigl" 32 | LIBIGL_INCLUDE_DIR) 33 | mark_as_advanced(LIBIGL_INCLUDE_DIR) 34 | 35 | list(APPEND CMAKE_MODULE_PATH "${LIBIGL_INCLUDE_DIR}/../cmake") 36 | include(libigl) 37 | -------------------------------------------------------------------------------- /cmake/libigl.cmake: -------------------------------------------------------------------------------- 1 | if(TARGET igl::core) 2 | return() 3 | endif() 4 | 5 | include(FetchContent) 6 | message(STATUS "Finding/Downloading libigl...") 7 | FetchContent_Declare( 8 | libigl 9 | GIT_REPOSITORY https://github.com/libigl/libigl.git 10 | GIT_TAG v2.4.0 11 | ) 12 | FetchContent_MakeAvailable(libigl) -------------------------------------------------------------------------------- /images/beetle-data-denoising.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/beetle-data-denoising.gif -------------------------------------------------------------------------------- /images/hat-function-gradient.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/hat-function-gradient.pdf -------------------------------------------------------------------------------- /images/hat-function-gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/hat-function-gradient.png -------------------------------------------------------------------------------- /images/hat-function.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/hat-function.pdf -------------------------------------------------------------------------------- /images/hat-function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/hat-function.png -------------------------------------------------------------------------------- /images/plane-smooth-data.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/plane-smooth-data.gif -------------------------------------------------------------------------------- /images/plane-smooth-geometry.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/plane-smooth-geometry.gif -------------------------------------------------------------------------------- /images/sphere-geometric-smoothing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/sphere-geometric-smoothing.gif -------------------------------------------------------------------------------- /images/voronoi-neighborhood.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alecjacobson/geometry-processing-smoothing/2b92daa68bad12dd7ab51bc44c4024ccb11b84ab/images/voronoi-neighborhood.ai -------------------------------------------------------------------------------- /include/cotmatrix.h: -------------------------------------------------------------------------------- 1 | #ifndef COTMATRIX_H 2 | #define COTMATRIX_H 3 | #include 4 | #include 5 | // Construct the "cotangent Laplacian" for a mesh with edge lengths `l`. Each 6 | // entry in the output sparse, symmetric matrix `L` is given by: 7 | // 8 | // \\[ 9 | // L_{ij} = \begin{cases} 10 | // ½ \cot{α_{ij}} + ½ \cot{β_{ij}} & \text{if edge $ij$ exists} \\\\\ 11 | // -∑_{j≠i} L_{ij} & \text{if $i = j} \\\\\ 12 | // 0 & \text{otherwise} 13 | // \end{cases} 14 | // \\] 15 | // 16 | // where $α_{ij}$ and $β_{ij}$ are the angles opposite the edge between 17 | // vertices i and j. 18 | // 19 | // Inputs: 20 | // l #F by 3 matrix so that l(f,c) is the length of the "half-edge" 21 | // **_across_** from the cth of the fth face. 22 | // F #F by 3 list of triangle indices into a vertex list `V`. You may assume 23 | // that the number of vertices #V = F.maxCoeff()+1 24 | // Outputs: 25 | // L #V by #V sparse symmetric Laplacian matrix 26 | // 27 | void cotmatrix( 28 | const Eigen::MatrixXd & l, 29 | const Eigen::MatrixXi & F, 30 | Eigen::SparseMatrix & L); 31 | #endif 32 | -------------------------------------------------------------------------------- /include/massmatrix.h: -------------------------------------------------------------------------------- 1 | #ifndef MASSMATRIX_H 2 | #define MASSMATRIX_H 3 | #include 4 | #include 5 | // Construct the diagonal(ized) mass matrix for a mesh with edge lengths `l`. 6 | // Each enetry in the output sparse, symmetric matrix `M` is given by: 7 | // 8 | // \\[ 9 | // M_{ij} = \begin{cases} 10 | // ∑ ⅓ A_{f} & \text{if face $f$ containing $i$ and $j$ exists} \\\\\ 11 | // 0 & \text{otherwise} 12 | // \end{cases} 13 | // \\] 14 | // 15 | // where $A_f$ is the area of the fth face. 16 | // 17 | // Inputs: 18 | // l #F by 3 matrix so that l(f,c) is the length of the "half-edge" 19 | // **_across_** from the cth of the fth face. 20 | // F #F by 3 list of triangle indices into a vertex list `V`. You may assume 21 | // that the number of vertices #V = F.maxCoeff()+1 22 | // Outputs: 23 | // M #V by #V diagonal matrix 24 | // 25 | void massmatrix( 26 | const Eigen::MatrixXd & l, 27 | const Eigen::MatrixXi & F, 28 | Eigen::DiagonalMatrix & M); 29 | #endif 30 | -------------------------------------------------------------------------------- /include/smooth.h: -------------------------------------------------------------------------------- 1 | #ifndef SMOOTH_H 2 | #define SMOOTH_H 3 | #include 4 | #include 5 | // Given a mesh (`V`,`F`) and data specified per-vertex (`G`), smooth this data 6 | // using a single implicit Laplacian smoothing step. 7 | // 8 | // Inputs: 9 | // V #V by 3 list of mesh vertex positions 10 | // F #F by 3 list of mesh triangle indices into V 11 | // G #V by dim list of per-vertex data: could be scalar- (`dim =1`) or 12 | // vector-valued (`dim>1`). 13 | // lambda >0 smoothing parameter also known as the "time step" `dt` 14 | // Outputs: 15 | // U #V by dim list of smoothed data 16 | // 17 | void smooth( 18 | const Eigen::MatrixXd & V, 19 | const Eigen::MatrixXi & F, 20 | const Eigen::MatrixXd & G, 21 | double lambda, 22 | Eigen::MatrixXd & U); 23 | #endif 24 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include "smooth.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | int main(int argc, char *argv[]) 11 | { 12 | // Load input meshes 13 | Eigen::MatrixXd OV,V,U; 14 | Eigen::MatrixXi F; 15 | double lambda = 1e-5; 16 | igl::read_triangle_mesh( 17 | (argc>1?argv[1]:"../data/sphere-noisy.obj"),OV,F); 18 | // Load data into MatrixXd rather than VectorXd for simpler `smooth` API 19 | // Just use y-coordinates as data to be smoothed 20 | Eigen::MatrixXd G = OV.col(1); 21 | if(argc>2) 22 | { 23 | if(argv[2][0] == 'n') 24 | { 25 | // Corrupt with a bit of noise 26 | G += 0.1*(G.maxCoeff()-G.minCoeff())* 27 | Eigen::MatrixXd::Random(G.rows(),G.cols()); 28 | }else 29 | { 30 | igl::readDMAT(argv[2],G); 31 | } 32 | } 33 | 34 | igl::opengl::glfw::Viewer viewer; 35 | std::cout< & L) 7 | { 8 | // Add your code here 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/massmatrix.cpp: -------------------------------------------------------------------------------- 1 | #include "massmatrix.h" 2 | 3 | void massmatrix( 4 | const Eigen::MatrixXd & l, 5 | const Eigen::MatrixXi & F, 6 | Eigen::DiagonalMatrix & M) 7 | { 8 | // Add your code here 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/smooth.cpp: -------------------------------------------------------------------------------- 1 | #include "smooth.h" 2 | 3 | void smooth( 4 | const Eigen::MatrixXd & V, 5 | const Eigen::MatrixXi & F, 6 | const Eigen::MatrixXd & G, 7 | double lambda, 8 | Eigen::MatrixXd & U) 9 | { 10 | // Replace with your code 11 | U = G; 12 | } 13 | -------------------------------------------------------------------------------- /tex/00e14c64b601ac983b4364aa60fa1dc6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/01f40bdda54d9ab256ddd5e9a04e371b.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/04fdc9ebe2a4f15ffdd732d0abd189e1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/06e8e88b4ac31efcc03ecf253f9609ba.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tex/0e51a2dede42189d77627c4d742822c3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/190083ef7a1625fbc75f243cffb9c96d.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/191fb656c7f4f20997cf240f7af26caf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/193e99dd587ecc23cdd8853e4cd46a76.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tex/1b109d8b4484cf614f27126d788c510e.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/1c899e1c767eb4eac89facb5d1f2cb0d.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/26eb59da31fb48cb17abfe4c6dc80375.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/2781fb506c10958a89548aa070f15594.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/289bc3c68d369342d98da6ff43ec5b9f.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/2ad9d098b937e46f9f58968551adac57.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/2b41e5149bbd9bd2a0b7170924be9b80.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/2dfa893f7bf3c5c01ceb4788da782da0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/31fae8b8b78ebe01cbfbe2fe53832624.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/36b5afebdba34564d884d347484ac0c7.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/45f257d25bb292b0f5b8a984f4efbe84.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/461fd2586080bcfe7ac91515a525affe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/4870d18d47ab6d0e32510c4b1ccf4927.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/520957eebcbc4341addf55ec1a6ef0ab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/53d147e7f3fe6e47ee05b88b166bd3f6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/5435f08c809898be0b38d31c7232e2af.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/545994479b8eb0934d80a97627e63f82.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/55a049b8f161ae7cfeb0197d75aff967.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/58e56656e6e782a9941daf494e8471eb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/5a6a7ddb47dbe4427df2767dd2254d3c.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/5e025aa9bc7c6818199db0d8fb82bd3e.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/5e5d7941135a825fa8ab551e0eb76a4f.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/61e84f854bc6258d4108d08d4c4a0852.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/6ac64257e8429516f022faf3750898f9.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/6c4adbc36120d62b98deef2a20d5d303.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/6d22be1359e204374e6f0b45e318d561.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/6dbb78540bd76da3f1625782d42d6d16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/74341d0452aa58e0f8653b6058b1f3f6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tex/74a93b9b98af7c7b321f354c4fcf8ea2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /tex/77a3b857d53fb44e33b53e4c8b68351a.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/7a676caa07476cecc1fef337bd6a860e.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/7d9f97a055843950ec03bc359085c06e.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/80637df1ca7533740cc7b3fdd1ab540b.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/84df98c65d88c6adf15d4645ffa25e47.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/902505b1f10837bf329ffbeb68762c74.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/965b9779f7d35773b987d1080ab428e9.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/a72b56a59ffa2be52208086ccb6f7562.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/b0ea07dc5c00127344a1cad40467b8de.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/b95c2b0aab2482e5bebd25332a4bbde0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/bb23bb09b67bb167730c76ff706043de.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tex/c6bcca8f259a226ca0748027158124bd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/d0cc021c5b0e6847b9929fd5c6ecd826.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tex/ddd3bc35b936d6a00e6a81cab0061f32.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/e0563ab36735bded51644cf89825f1d2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tex/e6bb22a58889cb2e58f4fce2f3a80e02.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/e7299099834dc07da267043c72b8955e.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tex/eb367462f49f6165b7702489cd3ad4ea.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tex/eb62325152b7dd734820edcdd33d2950.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tex/fd7c3eb33987d32e5867ff7bb1cacb55.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | --------------------------------------------------------------------------------