// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2014 Olga Diamanti // // 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/. #ifndef IGL_ANGLE_BOUND_FRAME_FIELDS_H #define IGL_ANGLE_BOUND_FRAME_FIELDS_H #include "igl_inline.h" #include #include namespace igl { //todo /// Given 2 vectors centered on origin calculate the rotation matrix from first to the second // Inputs: // v0, v1 the two #3 by 1 vectors // normalized boolean, if false, then the vectors are normalized prior to the calculation // Output: // 3 by 3 rotation matrix that takes v0 to v1 // template class AngleBoundFFSolverData; template IGL_INLINE bool angle_bound_frame_fields(const Eigen::PlainObjectBase &V, const Eigen::PlainObjectBase &F, const typename DerivedV::Scalar &thetaMin, const Eigen::VectorXi &isConstrained, const Eigen::PlainObjectBase &initialSolution, Eigen::PlainObjectBase &output, int _maxIter = 50, const typename DerivedV::Scalar &_lambdaInit = 100, const typename DerivedV::Scalar &_lambdaMultFactor = 1.5, const bool _doHardConstraints = false); template IGL_INLINE bool angle_bound_frame_fields(const AngleBoundFFSolverData &csdata, const typename DerivedV::Scalar &thetaMin, const Eigen::VectorXi &isConstrained, const Eigen::PlainObjectBase &initialSolution, Eigen::PlainObjectBase &output, int _maxIter = 50, const typename DerivedV::Scalar &_lambdaInit = 100, const typename DerivedV::Scalar &_lambdaMultFactor = 1.5, const bool _doHardConstraints = false, typename DerivedV::Scalar *lambdaOut = NULL); }; #ifndef IGL_STATIC_LIBRARY #include "angle_bound_frame_fields.cpp" #endif #endif