#include "rbfcore.h" #include "mymesh/utility.h" #include "Solver.h" #include #include #include #include #include #include #include #include #include "mymesh/readers.h" typedef std::chrono::high_resolution_clock Clock; bool RBF_Core::Set_Hermite_DesignedCurve(){ if(curMethod!=Hermite_Tangent_UnitNormal)return false; cout<<"Hermite_designcurve_weight: "<&pts, vector&tgt, vector &ede){ Set_Hermite_PredictNormal(pts); //Set_Hermite_DesignedCurve(); } int RBF_Core::Solve_Hermite_PredictNormal_TangentConstraint_UnitNorm(){ arma::vec eigval, ny; arma::mat eigvec; arma::sp_mat c2(npt,npt*3); arma::sp_mat eye; auto p_tangent = tangents.data(); for(int i=0;i>projection; vectorisNullVec(npt*3,false); for(int i=0;idottangenttest(npt); initnormals.resize(npt*3); arma::vec y(npt*4); for(int i=0;i&x, vector&grad, void *fdata); static int countopt = 0; double optfunc_Hermite_Tangents(const vector&x, vector&grad, void *fdata){ RBF_Core *drbf = reinterpret_cast(fdata); int n = drbf->npt; arma::vec arma_x(n*3); vector&coff_cos = drbf->coff_cos; vector&coff_sin = drbf->coff_sin; //( sin(a)cos(b), sin(a)sin(b), cos(a) ) a =>[0, pi], b => [-pi, pi]; vectorcosa(n); vectorsina(n); for(int i=0;ifinalH * arma_x; if (!grad.empty()) { grad.resize(n); for(int i=0;iupper(npt); vectorlower(npt); for(int i=0;iupper(npt); vectorlower(npt); for(int i=0;i(n*n, n*k, 1e-4);//double(k)/nnpt arma::vec bb; cout << "init time: " << (setup_time = std::chrono::nanoseconds(Clock::now() - t1).count()/1e9) << endl; t1 = Clock::now(); arma::sp_mat AA(A.t()*A); bb.ones(n*n); bb=A.t()*bb; cout << "AAbb time: " << (setup_time = std::chrono::nanoseconds(Clock::now() - t1).count()/1e9) << endl; cout<<"SparseMatrixTest "<eva(3); for(int i=0;iisNullVec(3,false); for(int i=0;i<3;++i){ double val = arma::norm(c2*eigenmatrix.col(i)); if(val<1e-5)isNullVec[i]=true; } int smalleig = 0; for(int i=0;i&nors){ double css[3]; auto p_nor = nors.data(); coff_cos.resize(npt*3); coff_sin.resize(npt*3); auto p_cos = coff_cos.data(); auto p_sin = coff_sin.data(); for(int i=0;i