// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2017 Alec Jacobson // and Oded Stein // // This Source Code Form is subject to the terms of the Mozilla Public License // v. 2.0. If a copy of the MPL was not distributed with this file, You can // obtain one at http://mozilla.org/MPL/2.0/. #include "hessian.h" #include #include "grad.h" #include "igl/doublearea.h" #include "igl/repdiag.h" template IGL_INLINE void igl::hessian( const Eigen::MatrixBase & V, const Eigen::MatrixBase & F, Eigen::SparseMatrix& H) { typedef typename DerivedV::Scalar denseScalar; typedef typename Eigen::Matrix VecXd; typedef typename Eigen::SparseMatrix SparseMat; typedef typename Eigen::DiagonalMatrix DiagMat; int dim = V.cols(); assert((dim==2 || dim==3) && "The dimension of the vertices should be 2 or 3"); //Construct the combined gradient matric SparseMat G; igl::grad(DerivedV(V), DerivedF(F), G, false); SparseMat GG(F.rows(), dim*V.rows()); GG.reserve(G.nonZeros()); for(int i=0; i, Eigen::Matrix, double>(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::SparseMatrix&); #endif