// // grad.h // Preview3D // // Created by Olga Diamanti on 11/11/11. // Copyright (c) 2011 __MyCompanyName__. All rights reserved. // #ifndef Preview3D_grad_h #define Preview3D_grad_h #include namespace igl { // GRAD // G = grad(V,F,X) // // Compute the numerical gradient at every face of a triangle mesh. // // Inputs: // V #vertices by 3 list of mesh vertex positions // F #faces by 3 list of mesh face indices // X # vertices list of scalar function values // Outputs: // G #faces by 3 list of gradient values // // Gradient of a scalar function defined on piecewise linear elements (mesh) // is constant on each triangle i,j,k: // grad(Xijk) = (Xj-Xi) * (Vi - Vk)^R90 / 2A + (Xk-Xi) * (Vj - Vi)^R90 / 2A // where Xi is the scalar value at vertex i, Vi is the 3D position of vertex // i, and A is the area of triangle (i,j,k). ^R90 represent a rotation of // 90 degrees // void grad(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, const Eigen::VectorXd &X, Eigen::MatrixXd &G ); } inline void igl::grad(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, const Eigen::VectorXd &X, Eigen::MatrixXd &G) { G = Eigen::MatrixXd::Zero(F.rows(),3); for (int i = 0; i