ruby-eigen 0.0.9 → 0.0.10.pre1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|