ruby-eigen 0.0.9 → 0.0.10.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +22 -0
- data/README.md +21 -0
- data/ext/eigen/eigen3/COPYING.BSD +26 -0
- data/ext/eigen/eigen3/COPYING.MPL2 +373 -0
- data/ext/eigen/eigen3/COPYING.README +18 -0
- data/ext/eigen/eigen3/Eigen/Array +11 -0
- data/ext/eigen/eigen3/Eigen/Cholesky +32 -0
- data/ext/eigen/eigen3/Eigen/CholmodSupport +45 -0
- data/ext/eigen/eigen3/Eigen/Core +376 -0
- data/ext/eigen/eigen3/Eigen/Dense +7 -0
- data/ext/eigen/eigen3/Eigen/Eigen +2 -0
- data/ext/eigen/eigen3/Eigen/Eigen2Support +95 -0
- data/ext/eigen/eigen3/Eigen/Eigenvalues +48 -0
- data/ext/eigen/eigen3/Eigen/Geometry +63 -0
- data/ext/eigen/eigen3/Eigen/Householder +23 -0
- data/ext/eigen/eigen3/Eigen/IterativeLinearSolvers +40 -0
- data/ext/eigen/eigen3/Eigen/Jacobi +26 -0
- data/ext/eigen/eigen3/Eigen/LU +41 -0
- data/ext/eigen/eigen3/Eigen/LeastSquares +32 -0
- data/ext/eigen/eigen3/Eigen/MetisSupport +28 -0
- data/ext/eigen/eigen3/Eigen/PaStiXSupport +46 -0
- data/ext/eigen/eigen3/Eigen/PardisoSupport +30 -0
- data/ext/eigen/eigen3/Eigen/QR +45 -0
- data/ext/eigen/eigen3/Eigen/QtAlignedMalloc +34 -0
- data/ext/eigen/eigen3/Eigen/SPQRSupport +29 -0
- data/ext/eigen/eigen3/Eigen/SVD +37 -0
- data/ext/eigen/eigen3/Eigen/Sparse +27 -0
- data/ext/eigen/eigen3/Eigen/SparseCore +64 -0
- data/ext/eigen/eigen3/Eigen/SparseLU +49 -0
- data/ext/eigen/eigen3/Eigen/SparseQR +33 -0
- data/ext/eigen/eigen3/Eigen/StdDeque +27 -0
- data/ext/eigen/eigen3/Eigen/StdList +26 -0
- data/ext/eigen/eigen3/Eigen/StdVector +27 -0
- data/ext/eigen/eigen3/Eigen/SuperLUSupport +59 -0
- data/ext/eigen/eigen3/Eigen/UmfPackSupport +36 -0
- data/ext/eigen/eigen3/Eigen/src/Cholesky/LDLT.h +611 -0
- data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT.h +498 -0
- data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT_MKL.h +102 -0
- data/ext/eigen/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +607 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Array.h +323 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ArrayWrapper.h +264 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Assign.h +590 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Assign_MKL.h +224 -0
- data/ext/eigen/eigen3/Eigen/src/Core/BandMatrix.h +334 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Block.h +406 -0
- data/ext/eigen/eigen3/Eigen/src/Core/BooleanRedux.h +154 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CommaInitializer.h +154 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CoreIterators.h +61 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseBinaryOp.h +230 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseNullaryOp.h +864 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryOp.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryView.h +139 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DenseBase.h +521 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DenseCoeffsBase.h +754 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DenseStorage.h +434 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Diagonal.h +237 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DiagonalMatrix.h +313 -0
- data/ext/eigen/eigen3/Eigen/src/Core/DiagonalProduct.h +131 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Dot.h +263 -0
- data/ext/eigen/eigen3/Eigen/src/Core/EigenBase.h +131 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Flagged.h +140 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ForceAlignedAccess.h +146 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Functors.h +1026 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Fuzzy.h +150 -0
- data/ext/eigen/eigen3/Eigen/src/Core/GeneralProduct.h +635 -0
- data/ext/eigen/eigen3/Eigen/src/Core/GenericPacketMath.h +350 -0
- data/ext/eigen/eigen3/Eigen/src/Core/GlobalFunctions.h +92 -0
- data/ext/eigen/eigen3/Eigen/src/Core/IO.h +250 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Map.h +192 -0
- data/ext/eigen/eigen3/Eigen/src/Core/MapBase.h +247 -0
- data/ext/eigen/eigen3/Eigen/src/Core/MathFunctions.h +768 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Matrix.h +420 -0
- data/ext/eigen/eigen3/Eigen/src/Core/MatrixBase.h +563 -0
- data/ext/eigen/eigen3/Eigen/src/Core/NestByValue.h +111 -0
- data/ext/eigen/eigen3/Eigen/src/Core/NoAlias.h +134 -0
- data/ext/eigen/eigen3/Eigen/src/Core/NumTraits.h +150 -0
- data/ext/eigen/eigen3/Eigen/src/Core/PermutationMatrix.h +721 -0
- data/ext/eigen/eigen3/Eigen/src/Core/PlainObjectBase.h +822 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ProductBase.h +290 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Random.h +152 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Redux.h +409 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Ref.h +278 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Replicate.h +177 -0
- data/ext/eigen/eigen3/Eigen/src/Core/ReturnByValue.h +99 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Reverse.h +224 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Select.h +162 -0
- data/ext/eigen/eigen3/Eigen/src/Core/SelfAdjointView.h +314 -0
- data/ext/eigen/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +191 -0
- data/ext/eigen/eigen3/Eigen/src/Core/SolveTriangular.h +260 -0
- data/ext/eigen/eigen3/Eigen/src/Core/StableNorm.h +203 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Stride.h +108 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Swap.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Transpose.h +419 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Transpositions.h +436 -0
- data/ext/eigen/eigen3/Eigen/src/Core/TriangularMatrix.h +839 -0
- data/ext/eigen/eigen3/Eigen/src/Core/VectorBlock.h +95 -0
- data/ext/eigen/eigen3/Eigen/src/Core/VectorwiseOp.h +642 -0
- data/ext/eigen/eigen3/Eigen/src/Core/Visitor.h +237 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +217 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +501 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/Complex.h +253 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +420 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/Complex.h +442 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +475 -0
- data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +649 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/CoeffBasedProduct.h +476 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1341 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +427 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +278 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h +146 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h +118 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +566 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h +131 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/Parallelizer.h +162 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +436 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h +295 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +281 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h +114 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +123 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +427 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h +309 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +348 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector_MKL.h +247 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +332 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h +155 -0
- data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +139 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/BlasUtil.h +264 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Constants.h +451 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +40 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/MKL_support.h +158 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Macros.h +451 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Memory.h +977 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/Meta.h +243 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +14 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/StaticAssert.h +208 -0
- data/ext/eigen/eigen3/Eigen/src/Core/util/XprHelper.h +469 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Block.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Cwise.h +192 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/CwiseOperators.h +298 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h +159 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/All.h +115 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AngleAxis.h +214 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Hyperplane.h +254 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h +141 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Quaternion.h +495 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Rotation2D.h +145 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/RotationBase.h +123 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Scaling.h +167 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Transform.h +786 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Translation.h +184 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LU.h +120 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Lazy.h +71 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LeastSquares.h +169 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Macros.h +20 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/MathFunctions.h +57 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Memory.h +45 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Meta.h +75 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Minor.h +117 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/QR.h +67 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/SVD.h +637 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/TriangularSolver.h +42 -0
- data/ext/eigen/eigen3/Eigen/src/Eigen2Support/VectorBlock.h +94 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +341 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +456 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur_MKL.h +94 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +607 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +350 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +227 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +373 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +160 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealQZ.h +624 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur.h +525 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur_MKL.h +83 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +801 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h +92 -0
- data/ext/eigen/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +557 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/AlignedBox.h +392 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/AngleAxis.h +233 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/EulerAngles.h +104 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Homogeneous.h +307 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Hyperplane.h +280 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/OrthoMethods.h +218 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/ParametrizedLine.h +195 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Quaternion.h +776 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Rotation2D.h +160 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Scaling.h +166 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Transform.h +1455 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Translation.h +206 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/Umeyama.h +177 -0
- data/ext/eigen/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h +115 -0
- data/ext/eigen/eigen3/Eigen/src/Householder/BlockHouseholder.h +68 -0
- data/ext/eigen/eigen3/Eigen/src/Householder/Householder.h +171 -0
- data/ext/eigen/eigen3/Eigen/src/Householder/HouseholderSequence.h +441 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +263 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +256 -0
- data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +282 -0
- data/ext/eigen/eigen3/Eigen/src/Jacobi/Jacobi.h +433 -0
- data/ext/eigen/eigen3/Eigen/src/LU/Determinant.h +101 -0
- data/ext/eigen/eigen3/Eigen/src/LU/FullPivLU.h +751 -0
- data/ext/eigen/eigen3/Eigen/src/LU/Inverse.h +400 -0
- data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU.h +509 -0
- data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU_MKL.h +85 -0
- data/ext/eigen/eigen3/Eigen/src/LU/arch/Inverse_SSE.h +329 -0
- data/ext/eigen/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Amd.h +444 -0
- data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1850 -0
- data/ext/eigen/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +721 -0
- data/ext/eigen/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +592 -0
- data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +580 -0
- data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h +99 -0
- data/ext/eigen/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +622 -0
- data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR.h +388 -0
- data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR_MKL.h +71 -0
- data/ext/eigen/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +338 -0
- data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD.h +976 -0
- data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD_MKL.h +92 -0
- data/ext/eigen/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +148 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +671 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/AmbiVector.h +373 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/CompressedStorage.h +233 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +245 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +181 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseBlock.h +537 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +325 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +163 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +311 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +196 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDot.h +101 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +26 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1262 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +461 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparsePermutation.h +148 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseProduct.h +188 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseRedux.h +45 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +507 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +150 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTranspose.h +63 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +179 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseUtil.h +172 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseVector.h +448 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseView.h +99 -0
- data/ext/eigen/eigen3/Eigen/src/SparseCore/TriangularSolver.h +334 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU.h +806 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +227 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +111 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +298 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +180 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +177 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +279 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +127 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +135 -0
- data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- data/ext/eigen/eigen3/Eigen/src/SparseQR/SparseQR.h +714 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/StdDeque.h +134 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/StdList.h +114 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/StdVector.h +126 -0
- data/ext/eigen/eigen3/Eigen/src/StlSupport/details.h +84 -0
- data/ext/eigen/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1026 -0
- data/ext/eigen/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +474 -0
- data/ext/eigen/eigen3/Eigen/src/misc/Image.h +84 -0
- data/ext/eigen/eigen3/Eigen/src/misc/Kernel.h +81 -0
- data/ext/eigen/eigen3/Eigen/src/misc/Solve.h +76 -0
- data/ext/eigen/eigen3/Eigen/src/misc/SparseSolve.h +128 -0
- data/ext/eigen/eigen3/Eigen/src/misc/blas.h +658 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +253 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +187 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/BlockMethods.h +935 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +46 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +172 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +143 -0
- data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +52 -0
- data/ext/eigen/eigen3/signature_of_eigen3_matrix_library +1 -0
- data/ext/eigen/eigen_wrap.cxx +19420 -10396
- data/ext/eigen/extconf.rb +37 -2
- data/lib/eigen.rb +146 -3
- metadata +294 -7
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
// no include guard, we'll include this twice from All.h from Eigen2Support, and it's internal anyway
|
|
11
|
+
|
|
12
|
+
namespace Eigen {
|
|
13
|
+
|
|
14
|
+
/** \geometry_module \ingroup Geometry_Module
|
|
15
|
+
* \nonstableyet
|
|
16
|
+
*
|
|
17
|
+
* \class AlignedBox
|
|
18
|
+
*
|
|
19
|
+
* \brief An axis aligned box
|
|
20
|
+
*
|
|
21
|
+
* \param _Scalar the type of the scalar coefficients
|
|
22
|
+
* \param _AmbientDim the dimension of the ambient space, can be a compile time value or Dynamic.
|
|
23
|
+
*
|
|
24
|
+
* This class represents an axis aligned box as a pair of the minimal and maximal corners.
|
|
25
|
+
*/
|
|
26
|
+
template <typename _Scalar, int _AmbientDim>
|
|
27
|
+
class AlignedBox
|
|
28
|
+
{
|
|
29
|
+
public:
|
|
30
|
+
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim==Dynamic ? Dynamic : _AmbientDim+1)
|
|
31
|
+
enum { AmbientDimAtCompileTime = _AmbientDim };
|
|
32
|
+
typedef _Scalar Scalar;
|
|
33
|
+
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
34
|
+
typedef Matrix<Scalar,AmbientDimAtCompileTime,1> VectorType;
|
|
35
|
+
|
|
36
|
+
/** Default constructor initializing a null box. */
|
|
37
|
+
inline AlignedBox()
|
|
38
|
+
{ if (AmbientDimAtCompileTime!=Dynamic) setNull(); }
|
|
39
|
+
|
|
40
|
+
/** Constructs a null box with \a _dim the dimension of the ambient space. */
|
|
41
|
+
inline explicit AlignedBox(int _dim) : m_min(_dim), m_max(_dim)
|
|
42
|
+
{ setNull(); }
|
|
43
|
+
|
|
44
|
+
/** Constructs a box with extremities \a _min and \a _max. */
|
|
45
|
+
inline AlignedBox(const VectorType& _min, const VectorType& _max) : m_min(_min), m_max(_max) {}
|
|
46
|
+
|
|
47
|
+
/** Constructs a box containing a single point \a p. */
|
|
48
|
+
inline explicit AlignedBox(const VectorType& p) : m_min(p), m_max(p) {}
|
|
49
|
+
|
|
50
|
+
~AlignedBox() {}
|
|
51
|
+
|
|
52
|
+
/** \returns the dimension in which the box holds */
|
|
53
|
+
inline int dim() const { return AmbientDimAtCompileTime==Dynamic ? m_min.size()-1 : AmbientDimAtCompileTime; }
|
|
54
|
+
|
|
55
|
+
/** \returns true if the box is null, i.e, empty. */
|
|
56
|
+
inline bool isNull() const { return (m_min.cwise() > m_max).any(); }
|
|
57
|
+
|
|
58
|
+
/** Makes \c *this a null/empty box. */
|
|
59
|
+
inline void setNull()
|
|
60
|
+
{
|
|
61
|
+
m_min.setConstant( (std::numeric_limits<Scalar>::max)());
|
|
62
|
+
m_max.setConstant(-(std::numeric_limits<Scalar>::max)());
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** \returns the minimal corner */
|
|
66
|
+
inline const VectorType& (min)() const { return m_min; }
|
|
67
|
+
/** \returns a non const reference to the minimal corner */
|
|
68
|
+
inline VectorType& (min)() { return m_min; }
|
|
69
|
+
/** \returns the maximal corner */
|
|
70
|
+
inline const VectorType& (max)() const { return m_max; }
|
|
71
|
+
/** \returns a non const reference to the maximal corner */
|
|
72
|
+
inline VectorType& (max)() { return m_max; }
|
|
73
|
+
|
|
74
|
+
/** \returns true if the point \a p is inside the box \c *this. */
|
|
75
|
+
inline bool contains(const VectorType& p) const
|
|
76
|
+
{ return (m_min.cwise()<=p).all() && (p.cwise()<=m_max).all(); }
|
|
77
|
+
|
|
78
|
+
/** \returns true if the box \a b is entirely inside the box \c *this. */
|
|
79
|
+
inline bool contains(const AlignedBox& b) const
|
|
80
|
+
{ return (m_min.cwise()<=(b.min)()).all() && ((b.max)().cwise()<=m_max).all(); }
|
|
81
|
+
|
|
82
|
+
/** Extends \c *this such that it contains the point \a p and returns a reference to \c *this. */
|
|
83
|
+
inline AlignedBox& extend(const VectorType& p)
|
|
84
|
+
{ m_min = (m_min.cwise().min)(p); m_max = (m_max.cwise().max)(p); return *this; }
|
|
85
|
+
|
|
86
|
+
/** Extends \c *this such that it contains the box \a b and returns a reference to \c *this. */
|
|
87
|
+
inline AlignedBox& extend(const AlignedBox& b)
|
|
88
|
+
{ m_min = (m_min.cwise().min)(b.m_min); m_max = (m_max.cwise().max)(b.m_max); return *this; }
|
|
89
|
+
|
|
90
|
+
/** Clamps \c *this by the box \a b and returns a reference to \c *this. */
|
|
91
|
+
inline AlignedBox& clamp(const AlignedBox& b)
|
|
92
|
+
{ m_min = (m_min.cwise().max)(b.m_min); m_max = (m_max.cwise().min)(b.m_max); return *this; }
|
|
93
|
+
|
|
94
|
+
/** Translate \c *this by the vector \a t and returns a reference to \c *this. */
|
|
95
|
+
inline AlignedBox& translate(const VectorType& t)
|
|
96
|
+
{ m_min += t; m_max += t; return *this; }
|
|
97
|
+
|
|
98
|
+
/** \returns the squared distance between the point \a p and the box \c *this,
|
|
99
|
+
* and zero if \a p is inside the box.
|
|
100
|
+
* \sa exteriorDistance()
|
|
101
|
+
*/
|
|
102
|
+
inline Scalar squaredExteriorDistance(const VectorType& p) const;
|
|
103
|
+
|
|
104
|
+
/** \returns the distance between the point \a p and the box \c *this,
|
|
105
|
+
* and zero if \a p is inside the box.
|
|
106
|
+
* \sa squaredExteriorDistance()
|
|
107
|
+
*/
|
|
108
|
+
inline Scalar exteriorDistance(const VectorType& p) const
|
|
109
|
+
{ return ei_sqrt(squaredExteriorDistance(p)); }
|
|
110
|
+
|
|
111
|
+
/** \returns \c *this with scalar type casted to \a NewScalarType
|
|
112
|
+
*
|
|
113
|
+
* Note that if \a NewScalarType is equal to the current scalar type of \c *this
|
|
114
|
+
* then this function smartly returns a const reference to \c *this.
|
|
115
|
+
*/
|
|
116
|
+
template<typename NewScalarType>
|
|
117
|
+
inline typename internal::cast_return_type<AlignedBox,
|
|
118
|
+
AlignedBox<NewScalarType,AmbientDimAtCompileTime> >::type cast() const
|
|
119
|
+
{
|
|
120
|
+
return typename internal::cast_return_type<AlignedBox,
|
|
121
|
+
AlignedBox<NewScalarType,AmbientDimAtCompileTime> >::type(*this);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Copy constructor with scalar type conversion */
|
|
125
|
+
template<typename OtherScalarType>
|
|
126
|
+
inline explicit AlignedBox(const AlignedBox<OtherScalarType,AmbientDimAtCompileTime>& other)
|
|
127
|
+
{
|
|
128
|
+
m_min = (other.min)().template cast<Scalar>();
|
|
129
|
+
m_max = (other.max)().template cast<Scalar>();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** \returns \c true if \c *this is approximately equal to \a other, within the precision
|
|
133
|
+
* determined by \a prec.
|
|
134
|
+
*
|
|
135
|
+
* \sa MatrixBase::isApprox() */
|
|
136
|
+
bool isApprox(const AlignedBox& other, typename NumTraits<Scalar>::Real prec = precision<Scalar>()) const
|
|
137
|
+
{ return m_min.isApprox(other.m_min, prec) && m_max.isApprox(other.m_max, prec); }
|
|
138
|
+
|
|
139
|
+
protected:
|
|
140
|
+
|
|
141
|
+
VectorType m_min, m_max;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
template<typename Scalar,int AmbiantDim>
|
|
145
|
+
inline Scalar AlignedBox<Scalar,AmbiantDim>::squaredExteriorDistance(const VectorType& p) const
|
|
146
|
+
{
|
|
147
|
+
Scalar dist2(0);
|
|
148
|
+
Scalar aux;
|
|
149
|
+
for (int k=0; k<dim(); ++k)
|
|
150
|
+
{
|
|
151
|
+
if ((aux = (p[k]-m_min[k]))<Scalar(0))
|
|
152
|
+
dist2 += aux*aux;
|
|
153
|
+
else if ( (aux = (m_max[k]-p[k]))<Scalar(0))
|
|
154
|
+
dist2 += aux*aux;
|
|
155
|
+
}
|
|
156
|
+
return dist2;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
} // end namespace Eigen
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#ifndef EIGEN2_GEOMETRY_MODULE_H
|
|
2
|
+
#define EIGEN2_GEOMETRY_MODULE_H
|
|
3
|
+
|
|
4
|
+
#include <limits>
|
|
5
|
+
|
|
6
|
+
#ifndef M_PI
|
|
7
|
+
#define M_PI 3.14159265358979323846
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
#if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS
|
|
11
|
+
#include "RotationBase.h"
|
|
12
|
+
#include "Rotation2D.h"
|
|
13
|
+
#include "Quaternion.h"
|
|
14
|
+
#include "AngleAxis.h"
|
|
15
|
+
#include "Transform.h"
|
|
16
|
+
#include "Translation.h"
|
|
17
|
+
#include "Scaling.h"
|
|
18
|
+
#include "AlignedBox.h"
|
|
19
|
+
#include "Hyperplane.h"
|
|
20
|
+
#include "ParametrizedLine.h"
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
#define RotationBase eigen2_RotationBase
|
|
25
|
+
#define Rotation2D eigen2_Rotation2D
|
|
26
|
+
#define Rotation2Df eigen2_Rotation2Df
|
|
27
|
+
#define Rotation2Dd eigen2_Rotation2Dd
|
|
28
|
+
|
|
29
|
+
#define Quaternion eigen2_Quaternion
|
|
30
|
+
#define Quaternionf eigen2_Quaternionf
|
|
31
|
+
#define Quaterniond eigen2_Quaterniond
|
|
32
|
+
|
|
33
|
+
#define AngleAxis eigen2_AngleAxis
|
|
34
|
+
#define AngleAxisf eigen2_AngleAxisf
|
|
35
|
+
#define AngleAxisd eigen2_AngleAxisd
|
|
36
|
+
|
|
37
|
+
#define Transform eigen2_Transform
|
|
38
|
+
#define Transform2f eigen2_Transform2f
|
|
39
|
+
#define Transform2d eigen2_Transform2d
|
|
40
|
+
#define Transform3f eigen2_Transform3f
|
|
41
|
+
#define Transform3d eigen2_Transform3d
|
|
42
|
+
|
|
43
|
+
#define Translation eigen2_Translation
|
|
44
|
+
#define Translation2f eigen2_Translation2f
|
|
45
|
+
#define Translation2d eigen2_Translation2d
|
|
46
|
+
#define Translation3f eigen2_Translation3f
|
|
47
|
+
#define Translation3d eigen2_Translation3d
|
|
48
|
+
|
|
49
|
+
#define Scaling eigen2_Scaling
|
|
50
|
+
#define Scaling2f eigen2_Scaling2f
|
|
51
|
+
#define Scaling2d eigen2_Scaling2d
|
|
52
|
+
#define Scaling3f eigen2_Scaling3f
|
|
53
|
+
#define Scaling3d eigen2_Scaling3d
|
|
54
|
+
|
|
55
|
+
#define AlignedBox eigen2_AlignedBox
|
|
56
|
+
|
|
57
|
+
#define Hyperplane eigen2_Hyperplane
|
|
58
|
+
#define ParametrizedLine eigen2_ParametrizedLine
|
|
59
|
+
|
|
60
|
+
#define ei_toRotationMatrix eigen2_ei_toRotationMatrix
|
|
61
|
+
#define ei_quaternion_assign_impl eigen2_ei_quaternion_assign_impl
|
|
62
|
+
#define ei_transform_product_impl eigen2_ei_transform_product_impl
|
|
63
|
+
|
|
64
|
+
#include "RotationBase.h"
|
|
65
|
+
#include "Rotation2D.h"
|
|
66
|
+
#include "Quaternion.h"
|
|
67
|
+
#include "AngleAxis.h"
|
|
68
|
+
#include "Transform.h"
|
|
69
|
+
#include "Translation.h"
|
|
70
|
+
#include "Scaling.h"
|
|
71
|
+
#include "AlignedBox.h"
|
|
72
|
+
#include "Hyperplane.h"
|
|
73
|
+
#include "ParametrizedLine.h"
|
|
74
|
+
|
|
75
|
+
#undef ei_toRotationMatrix
|
|
76
|
+
#undef ei_quaternion_assign_impl
|
|
77
|
+
#undef ei_transform_product_impl
|
|
78
|
+
|
|
79
|
+
#undef RotationBase
|
|
80
|
+
#undef Rotation2D
|
|
81
|
+
#undef Rotation2Df
|
|
82
|
+
#undef Rotation2Dd
|
|
83
|
+
|
|
84
|
+
#undef Quaternion
|
|
85
|
+
#undef Quaternionf
|
|
86
|
+
#undef Quaterniond
|
|
87
|
+
|
|
88
|
+
#undef AngleAxis
|
|
89
|
+
#undef AngleAxisf
|
|
90
|
+
#undef AngleAxisd
|
|
91
|
+
|
|
92
|
+
#undef Transform
|
|
93
|
+
#undef Transform2f
|
|
94
|
+
#undef Transform2d
|
|
95
|
+
#undef Transform3f
|
|
96
|
+
#undef Transform3d
|
|
97
|
+
|
|
98
|
+
#undef Translation
|
|
99
|
+
#undef Translation2f
|
|
100
|
+
#undef Translation2d
|
|
101
|
+
#undef Translation3f
|
|
102
|
+
#undef Translation3d
|
|
103
|
+
|
|
104
|
+
#undef Scaling
|
|
105
|
+
#undef Scaling2f
|
|
106
|
+
#undef Scaling2d
|
|
107
|
+
#undef Scaling3f
|
|
108
|
+
#undef Scaling3d
|
|
109
|
+
|
|
110
|
+
#undef AlignedBox
|
|
111
|
+
|
|
112
|
+
#undef Hyperplane
|
|
113
|
+
#undef ParametrizedLine
|
|
114
|
+
|
|
115
|
+
#endif // EIGEN2_GEOMETRY_MODULE_H
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
// no include guard, we'll include this twice from All.h from Eigen2Support, and it's internal anyway
|
|
11
|
+
|
|
12
|
+
namespace Eigen {
|
|
13
|
+
|
|
14
|
+
/** \geometry_module \ingroup Geometry_Module
|
|
15
|
+
*
|
|
16
|
+
* \class AngleAxis
|
|
17
|
+
*
|
|
18
|
+
* \brief Represents a 3D rotation as a rotation angle around an arbitrary 3D axis
|
|
19
|
+
*
|
|
20
|
+
* \param _Scalar the scalar type, i.e., the type of the coefficients.
|
|
21
|
+
*
|
|
22
|
+
* The following two typedefs are provided for convenience:
|
|
23
|
+
* \li \c AngleAxisf for \c float
|
|
24
|
+
* \li \c AngleAxisd for \c double
|
|
25
|
+
*
|
|
26
|
+
* \addexample AngleAxisForEuler \label How to define a rotation from Euler-angles
|
|
27
|
+
*
|
|
28
|
+
* Combined with MatrixBase::Unit{X,Y,Z}, AngleAxis can be used to easily
|
|
29
|
+
* mimic Euler-angles. Here is an example:
|
|
30
|
+
* \include AngleAxis_mimic_euler.cpp
|
|
31
|
+
* Output: \verbinclude AngleAxis_mimic_euler.out
|
|
32
|
+
*
|
|
33
|
+
* \note This class is not aimed to be used to store a rotation transformation,
|
|
34
|
+
* but rather to make easier the creation of other rotation (Quaternion, rotation Matrix)
|
|
35
|
+
* and transformation objects.
|
|
36
|
+
*
|
|
37
|
+
* \sa class Quaternion, class Transform, MatrixBase::UnitX()
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
template<typename _Scalar> struct ei_traits<AngleAxis<_Scalar> >
|
|
41
|
+
{
|
|
42
|
+
typedef _Scalar Scalar;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
template<typename _Scalar>
|
|
46
|
+
class AngleAxis : public RotationBase<AngleAxis<_Scalar>,3>
|
|
47
|
+
{
|
|
48
|
+
typedef RotationBase<AngleAxis<_Scalar>,3> Base;
|
|
49
|
+
|
|
50
|
+
public:
|
|
51
|
+
|
|
52
|
+
using Base::operator*;
|
|
53
|
+
|
|
54
|
+
enum { Dim = 3 };
|
|
55
|
+
/** the scalar type of the coefficients */
|
|
56
|
+
typedef _Scalar Scalar;
|
|
57
|
+
typedef Matrix<Scalar,3,3> Matrix3;
|
|
58
|
+
typedef Matrix<Scalar,3,1> Vector3;
|
|
59
|
+
typedef Quaternion<Scalar> QuaternionType;
|
|
60
|
+
|
|
61
|
+
protected:
|
|
62
|
+
|
|
63
|
+
Vector3 m_axis;
|
|
64
|
+
Scalar m_angle;
|
|
65
|
+
|
|
66
|
+
public:
|
|
67
|
+
|
|
68
|
+
/** Default constructor without initialization. */
|
|
69
|
+
AngleAxis() {}
|
|
70
|
+
/** Constructs and initialize the angle-axis rotation from an \a angle in radian
|
|
71
|
+
* and an \a axis which must be normalized. */
|
|
72
|
+
template<typename Derived>
|
|
73
|
+
inline AngleAxis(Scalar angle, const MatrixBase<Derived>& axis) : m_axis(axis), m_angle(angle) {}
|
|
74
|
+
/** Constructs and initialize the angle-axis rotation from a quaternion \a q. */
|
|
75
|
+
inline AngleAxis(const QuaternionType& q) { *this = q; }
|
|
76
|
+
/** Constructs and initialize the angle-axis rotation from a 3x3 rotation matrix. */
|
|
77
|
+
template<typename Derived>
|
|
78
|
+
inline explicit AngleAxis(const MatrixBase<Derived>& m) { *this = m; }
|
|
79
|
+
|
|
80
|
+
Scalar angle() const { return m_angle; }
|
|
81
|
+
Scalar& angle() { return m_angle; }
|
|
82
|
+
|
|
83
|
+
const Vector3& axis() const { return m_axis; }
|
|
84
|
+
Vector3& axis() { return m_axis; }
|
|
85
|
+
|
|
86
|
+
/** Concatenates two rotations */
|
|
87
|
+
inline QuaternionType operator* (const AngleAxis& other) const
|
|
88
|
+
{ return QuaternionType(*this) * QuaternionType(other); }
|
|
89
|
+
|
|
90
|
+
/** Concatenates two rotations */
|
|
91
|
+
inline QuaternionType operator* (const QuaternionType& other) const
|
|
92
|
+
{ return QuaternionType(*this) * other; }
|
|
93
|
+
|
|
94
|
+
/** Concatenates two rotations */
|
|
95
|
+
friend inline QuaternionType operator* (const QuaternionType& a, const AngleAxis& b)
|
|
96
|
+
{ return a * QuaternionType(b); }
|
|
97
|
+
|
|
98
|
+
/** Concatenates two rotations */
|
|
99
|
+
inline Matrix3 operator* (const Matrix3& other) const
|
|
100
|
+
{ return toRotationMatrix() * other; }
|
|
101
|
+
|
|
102
|
+
/** Concatenates two rotations */
|
|
103
|
+
inline friend Matrix3 operator* (const Matrix3& a, const AngleAxis& b)
|
|
104
|
+
{ return a * b.toRotationMatrix(); }
|
|
105
|
+
|
|
106
|
+
/** Applies rotation to vector */
|
|
107
|
+
inline Vector3 operator* (const Vector3& other) const
|
|
108
|
+
{ return toRotationMatrix() * other; }
|
|
109
|
+
|
|
110
|
+
/** \returns the inverse rotation, i.e., an angle-axis with opposite rotation angle */
|
|
111
|
+
AngleAxis inverse() const
|
|
112
|
+
{ return AngleAxis(-m_angle, m_axis); }
|
|
113
|
+
|
|
114
|
+
AngleAxis& operator=(const QuaternionType& q);
|
|
115
|
+
template<typename Derived>
|
|
116
|
+
AngleAxis& operator=(const MatrixBase<Derived>& m);
|
|
117
|
+
|
|
118
|
+
template<typename Derived>
|
|
119
|
+
AngleAxis& fromRotationMatrix(const MatrixBase<Derived>& m);
|
|
120
|
+
Matrix3 toRotationMatrix(void) const;
|
|
121
|
+
|
|
122
|
+
/** \returns \c *this with scalar type casted to \a NewScalarType
|
|
123
|
+
*
|
|
124
|
+
* Note that if \a NewScalarType is equal to the current scalar type of \c *this
|
|
125
|
+
* then this function smartly returns a const reference to \c *this.
|
|
126
|
+
*/
|
|
127
|
+
template<typename NewScalarType>
|
|
128
|
+
inline typename internal::cast_return_type<AngleAxis,AngleAxis<NewScalarType> >::type cast() const
|
|
129
|
+
{ return typename internal::cast_return_type<AngleAxis,AngleAxis<NewScalarType> >::type(*this); }
|
|
130
|
+
|
|
131
|
+
/** Copy constructor with scalar type conversion */
|
|
132
|
+
template<typename OtherScalarType>
|
|
133
|
+
inline explicit AngleAxis(const AngleAxis<OtherScalarType>& other)
|
|
134
|
+
{
|
|
135
|
+
m_axis = other.axis().template cast<Scalar>();
|
|
136
|
+
m_angle = Scalar(other.angle());
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** \returns \c true if \c *this is approximately equal to \a other, within the precision
|
|
140
|
+
* determined by \a prec.
|
|
141
|
+
*
|
|
142
|
+
* \sa MatrixBase::isApprox() */
|
|
143
|
+
bool isApprox(const AngleAxis& other, typename NumTraits<Scalar>::Real prec = precision<Scalar>()) const
|
|
144
|
+
{ return m_axis.isApprox(other.m_axis, prec) && ei_isApprox(m_angle,other.m_angle, prec); }
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/** \ingroup Geometry_Module
|
|
148
|
+
* single precision angle-axis type */
|
|
149
|
+
typedef AngleAxis<float> AngleAxisf;
|
|
150
|
+
/** \ingroup Geometry_Module
|
|
151
|
+
* double precision angle-axis type */
|
|
152
|
+
typedef AngleAxis<double> AngleAxisd;
|
|
153
|
+
|
|
154
|
+
/** Set \c *this from a quaternion.
|
|
155
|
+
* The axis is normalized.
|
|
156
|
+
*/
|
|
157
|
+
template<typename Scalar>
|
|
158
|
+
AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const QuaternionType& q)
|
|
159
|
+
{
|
|
160
|
+
Scalar n2 = q.vec().squaredNorm();
|
|
161
|
+
if (n2 < precision<Scalar>()*precision<Scalar>())
|
|
162
|
+
{
|
|
163
|
+
m_angle = 0;
|
|
164
|
+
m_axis << 1, 0, 0;
|
|
165
|
+
}
|
|
166
|
+
else
|
|
167
|
+
{
|
|
168
|
+
m_angle = 2*std::acos(q.w());
|
|
169
|
+
m_axis = q.vec() / ei_sqrt(n2);
|
|
170
|
+
}
|
|
171
|
+
return *this;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** Set \c *this from a 3x3 rotation matrix \a mat.
|
|
175
|
+
*/
|
|
176
|
+
template<typename Scalar>
|
|
177
|
+
template<typename Derived>
|
|
178
|
+
AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const MatrixBase<Derived>& mat)
|
|
179
|
+
{
|
|
180
|
+
// Since a direct conversion would not be really faster,
|
|
181
|
+
// let's use the robust Quaternion implementation:
|
|
182
|
+
return *this = QuaternionType(mat);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Constructs and \returns an equivalent 3x3 rotation matrix.
|
|
186
|
+
*/
|
|
187
|
+
template<typename Scalar>
|
|
188
|
+
typename AngleAxis<Scalar>::Matrix3
|
|
189
|
+
AngleAxis<Scalar>::toRotationMatrix(void) const
|
|
190
|
+
{
|
|
191
|
+
Matrix3 res;
|
|
192
|
+
Vector3 sin_axis = ei_sin(m_angle) * m_axis;
|
|
193
|
+
Scalar c = ei_cos(m_angle);
|
|
194
|
+
Vector3 cos1_axis = (Scalar(1)-c) * m_axis;
|
|
195
|
+
|
|
196
|
+
Scalar tmp;
|
|
197
|
+
tmp = cos1_axis.x() * m_axis.y();
|
|
198
|
+
res.coeffRef(0,1) = tmp - sin_axis.z();
|
|
199
|
+
res.coeffRef(1,0) = tmp + sin_axis.z();
|
|
200
|
+
|
|
201
|
+
tmp = cos1_axis.x() * m_axis.z();
|
|
202
|
+
res.coeffRef(0,2) = tmp + sin_axis.y();
|
|
203
|
+
res.coeffRef(2,0) = tmp - sin_axis.y();
|
|
204
|
+
|
|
205
|
+
tmp = cos1_axis.y() * m_axis.z();
|
|
206
|
+
res.coeffRef(1,2) = tmp - sin_axis.x();
|
|
207
|
+
res.coeffRef(2,1) = tmp + sin_axis.x();
|
|
208
|
+
|
|
209
|
+
res.diagonal() = (cos1_axis.cwise() * m_axis).cwise() + c;
|
|
210
|
+
|
|
211
|
+
return res;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
} // end namespace Eigen
|