|
@@ -84,7 +84,7 @@ IGL_INLINE bool igl::harmonic(
|
|
using namespace Eigen;
|
|
using namespace Eigen;
|
|
typedef typename Derivedbc::Scalar Scalar;
|
|
typedef typename Derivedbc::Scalar Scalar;
|
|
typedef Matrix<Scalar,Dynamic,1> VectorXS;
|
|
typedef Matrix<Scalar,Dynamic,1> VectorXS;
|
|
- SparseMatrix<Scalar> Q;
|
|
|
|
|
|
+ SparseMatrix<Scalar> Q,L;
|
|
SparseMatrix<Scalar> A;
|
|
SparseMatrix<Scalar> A;
|
|
adjacency_matrix(F,A);
|
|
adjacency_matrix(F,A);
|
|
// sum each row
|
|
// sum each row
|
|
@@ -94,7 +94,13 @@ IGL_INLINE bool igl::harmonic(
|
|
SparseMatrix<Scalar> Adiag;
|
|
SparseMatrix<Scalar> Adiag;
|
|
diag(Asum,Adiag);
|
|
diag(Asum,Adiag);
|
|
// Build uniform laplacian
|
|
// Build uniform laplacian
|
|
- Q = -A+Adiag;
|
|
|
|
|
|
+ L = -A+Adiag;
|
|
|
|
+ Q = L;
|
|
|
|
+ for(int p = 1;p<k;p++)
|
|
|
|
+ {
|
|
|
|
+ Q = (Q*L).eval();
|
|
|
|
+ }
|
|
|
|
+
|
|
min_quad_with_fixed_data<Scalar> data;
|
|
min_quad_with_fixed_data<Scalar> data;
|
|
min_quad_with_fixed_precompute(Q,b,SparseMatrix<Scalar>(),true,data);
|
|
min_quad_with_fixed_precompute(Q,b,SparseMatrix<Scalar>(),true,data);
|
|
W.resize(A.rows(),bc.cols());
|
|
W.resize(A.rows(),bc.cols());
|