@smake/eigen 1.1.0 → 1.1.1
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.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -10,82 +10,85 @@
|
|
|
10
10
|
#ifndef EIGEN_ANGLEAXIS_H
|
|
11
11
|
#define EIGEN_ANGLEAXIS_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
/** \geometry_module \ingroup Geometry_Module
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
19
|
+
*
|
|
20
|
+
* \class AngleAxis
|
|
21
|
+
*
|
|
22
|
+
* \brief Represents a 3D rotation as a rotation angle around an arbitrary 3D axis
|
|
23
|
+
*
|
|
24
|
+
* \param Scalar_ the scalar type, i.e., the type of the coefficients.
|
|
25
|
+
*
|
|
26
|
+
* \warning When setting up an AngleAxis object, the axis vector \b must \b be \b normalized.
|
|
27
|
+
*
|
|
28
|
+
* The following two typedefs are provided for convenience:
|
|
29
|
+
* \li \c AngleAxisf for \c float
|
|
30
|
+
* \li \c AngleAxisd for \c double
|
|
31
|
+
*
|
|
32
|
+
* Combined with MatrixBase::Unit{X,Y,Z}, AngleAxis can be used to easily
|
|
33
|
+
* mimic Euler-angles. Here is an example:
|
|
34
|
+
* \include AngleAxis_mimic_euler.cpp
|
|
35
|
+
* Output: \verbinclude AngleAxis_mimic_euler.out
|
|
36
|
+
*
|
|
37
|
+
* \note This class is not aimed to be used to store a rotation transformation,
|
|
38
|
+
* but rather to make easier the creation of other rotation (Quaternion, rotation Matrix)
|
|
39
|
+
* and transformation objects.
|
|
40
|
+
*
|
|
41
|
+
* \sa class Quaternion, class Transform, MatrixBase::UnitX()
|
|
42
|
+
*/
|
|
40
43
|
|
|
41
44
|
namespace internal {
|
|
42
|
-
template<typename
|
|
43
|
-
{
|
|
44
|
-
typedef
|
|
45
|
+
template <typename Scalar_>
|
|
46
|
+
struct traits<AngleAxis<Scalar_> > {
|
|
47
|
+
typedef Scalar_ Scalar;
|
|
45
48
|
};
|
|
46
|
-
}
|
|
49
|
+
} // namespace internal
|
|
47
50
|
|
|
48
|
-
template<typename
|
|
49
|
-
class AngleAxis : public RotationBase<AngleAxis<
|
|
50
|
-
|
|
51
|
-
typedef RotationBase<AngleAxis<_Scalar>,3> Base;
|
|
52
|
-
|
|
53
|
-
public:
|
|
51
|
+
template <typename Scalar_>
|
|
52
|
+
class AngleAxis : public RotationBase<AngleAxis<Scalar_>, 3> {
|
|
53
|
+
typedef RotationBase<AngleAxis<Scalar_>, 3> Base;
|
|
54
54
|
|
|
55
|
+
public:
|
|
55
56
|
using Base::operator*;
|
|
56
57
|
|
|
57
58
|
enum { Dim = 3 };
|
|
58
59
|
/** the scalar type of the coefficients */
|
|
59
|
-
typedef
|
|
60
|
-
typedef Matrix<Scalar,3,3> Matrix3;
|
|
61
|
-
typedef Matrix<Scalar,3,1> Vector3;
|
|
60
|
+
typedef Scalar_ Scalar;
|
|
61
|
+
typedef Matrix<Scalar, 3, 3> Matrix3;
|
|
62
|
+
typedef Matrix<Scalar, 3, 1> Vector3;
|
|
62
63
|
typedef Quaternion<Scalar> QuaternionType;
|
|
63
64
|
|
|
64
|
-
protected:
|
|
65
|
-
|
|
65
|
+
protected:
|
|
66
66
|
Vector3 m_axis;
|
|
67
67
|
Scalar m_angle;
|
|
68
68
|
|
|
69
|
-
public:
|
|
70
|
-
|
|
69
|
+
public:
|
|
71
70
|
/** Default constructor without initialization. */
|
|
72
71
|
EIGEN_DEVICE_FUNC AngleAxis() {}
|
|
73
72
|
/** Constructs and initialize the angle-axis rotation from an \a angle in radian
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
template<typename Derived>
|
|
79
|
-
EIGEN_DEVICE_FUNC
|
|
80
|
-
|
|
73
|
+
* and an \a axis which \b must \b be \b normalized.
|
|
74
|
+
*
|
|
75
|
+
* \warning If the \a axis vector is not normalized, then the angle-axis object
|
|
76
|
+
* represents an invalid rotation. */
|
|
77
|
+
template <typename Derived>
|
|
78
|
+
EIGEN_DEVICE_FUNC inline AngleAxis(const Scalar& angle, const MatrixBase<Derived>& axis)
|
|
79
|
+
: m_axis(axis), m_angle(angle) {}
|
|
81
80
|
/** Constructs and initialize the angle-axis rotation from a quaternion \a q.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
template<typename QuatDerived>
|
|
85
|
-
EIGEN_DEVICE_FUNC inline explicit AngleAxis(const QuaternionBase<QuatDerived>& q) {
|
|
81
|
+
* This function implicitly normalizes the quaternion \a q.
|
|
82
|
+
*/
|
|
83
|
+
template <typename QuatDerived>
|
|
84
|
+
EIGEN_DEVICE_FUNC inline explicit AngleAxis(const QuaternionBase<QuatDerived>& q) {
|
|
85
|
+
*this = q;
|
|
86
|
+
}
|
|
86
87
|
/** Constructs and initialize the angle-axis rotation from a 3x3 rotation matrix. */
|
|
87
|
-
template<typename Derived>
|
|
88
|
-
EIGEN_DEVICE_FUNC inline explicit AngleAxis(const MatrixBase<Derived>& m) {
|
|
88
|
+
template <typename Derived>
|
|
89
|
+
EIGEN_DEVICE_FUNC inline explicit AngleAxis(const MatrixBase<Derived>& m) {
|
|
90
|
+
*this = m;
|
|
91
|
+
}
|
|
89
92
|
|
|
90
93
|
/** \returns the value of the rotation angle in radian */
|
|
91
94
|
EIGEN_DEVICE_FUNC Scalar angle() const { return m_angle; }
|
|
@@ -95,49 +98,52 @@ public:
|
|
|
95
98
|
/** \returns the rotation axis */
|
|
96
99
|
EIGEN_DEVICE_FUNC const Vector3& axis() const { return m_axis; }
|
|
97
100
|
/** \returns a read-write reference to the stored rotation axis.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
*
|
|
102
|
+
* \warning The rotation axis must remain a \b unit vector.
|
|
103
|
+
*/
|
|
101
104
|
EIGEN_DEVICE_FUNC Vector3& axis() { return m_axis; }
|
|
102
105
|
|
|
103
106
|
/** Concatenates two rotations */
|
|
104
|
-
EIGEN_DEVICE_FUNC inline QuaternionType operator*
|
|
105
|
-
|
|
107
|
+
EIGEN_DEVICE_FUNC inline QuaternionType operator*(const AngleAxis& other) const {
|
|
108
|
+
return QuaternionType(*this) * QuaternionType(other);
|
|
109
|
+
}
|
|
106
110
|
|
|
107
111
|
/** Concatenates two rotations */
|
|
108
|
-
EIGEN_DEVICE_FUNC inline QuaternionType operator*
|
|
109
|
-
|
|
112
|
+
EIGEN_DEVICE_FUNC inline QuaternionType operator*(const QuaternionType& other) const {
|
|
113
|
+
return QuaternionType(*this) * other;
|
|
114
|
+
}
|
|
110
115
|
|
|
111
116
|
/** Concatenates two rotations */
|
|
112
|
-
friend EIGEN_DEVICE_FUNC inline QuaternionType operator*
|
|
113
|
-
|
|
117
|
+
friend EIGEN_DEVICE_FUNC inline QuaternionType operator*(const QuaternionType& a, const AngleAxis& b) {
|
|
118
|
+
return a * QuaternionType(b);
|
|
119
|
+
}
|
|
114
120
|
|
|
115
121
|
/** \returns the inverse rotation, i.e., an angle-axis with opposite rotation angle */
|
|
116
|
-
EIGEN_DEVICE_FUNC AngleAxis inverse() const
|
|
117
|
-
{ return AngleAxis(-m_angle, m_axis); }
|
|
122
|
+
EIGEN_DEVICE_FUNC AngleAxis inverse() const { return AngleAxis(-m_angle, m_axis); }
|
|
118
123
|
|
|
119
|
-
template<class QuatDerived>
|
|
124
|
+
template <class QuatDerived>
|
|
120
125
|
EIGEN_DEVICE_FUNC AngleAxis& operator=(const QuaternionBase<QuatDerived>& q);
|
|
121
|
-
template<typename Derived>
|
|
126
|
+
template <typename Derived>
|
|
122
127
|
EIGEN_DEVICE_FUNC AngleAxis& operator=(const MatrixBase<Derived>& m);
|
|
123
128
|
|
|
124
|
-
template<typename Derived>
|
|
129
|
+
template <typename Derived>
|
|
125
130
|
EIGEN_DEVICE_FUNC AngleAxis& fromRotationMatrix(const MatrixBase<Derived>& m);
|
|
126
131
|
EIGEN_DEVICE_FUNC Matrix3 toRotationMatrix(void) const;
|
|
127
132
|
|
|
128
133
|
/** \returns \c *this with scalar type casted to \a NewScalarType
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
template<typename NewScalarType>
|
|
134
|
-
EIGEN_DEVICE_FUNC inline typename internal::cast_return_type<AngleAxis,AngleAxis<NewScalarType> >::type cast()
|
|
135
|
-
|
|
134
|
+
*
|
|
135
|
+
* Note that if \a NewScalarType is equal to the current scalar type of \c *this
|
|
136
|
+
* then this function smartly returns a const reference to \c *this.
|
|
137
|
+
*/
|
|
138
|
+
template <typename NewScalarType>
|
|
139
|
+
EIGEN_DEVICE_FUNC inline typename internal::cast_return_type<AngleAxis, AngleAxis<NewScalarType> >::type cast()
|
|
140
|
+
const {
|
|
141
|
+
return typename internal::cast_return_type<AngleAxis, AngleAxis<NewScalarType> >::type(*this);
|
|
142
|
+
}
|
|
136
143
|
|
|
137
144
|
/** Copy constructor with scalar type conversion */
|
|
138
|
-
template<typename OtherScalarType>
|
|
139
|
-
EIGEN_DEVICE_FUNC inline explicit AngleAxis(const AngleAxis<OtherScalarType>& other)
|
|
140
|
-
{
|
|
145
|
+
template <typename OtherScalarType>
|
|
146
|
+
EIGEN_DEVICE_FUNC inline explicit AngleAxis(const AngleAxis<OtherScalarType>& other) {
|
|
141
147
|
m_axis = other.axis().template cast<Scalar>();
|
|
142
148
|
m_angle = Scalar(other.angle());
|
|
143
149
|
}
|
|
@@ -145,45 +151,41 @@ public:
|
|
|
145
151
|
EIGEN_DEVICE_FUNC static inline const AngleAxis Identity() { return AngleAxis(Scalar(0), Vector3::UnitX()); }
|
|
146
152
|
|
|
147
153
|
/** \returns \c true if \c *this is approximately equal to \a other, within the precision
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
EIGEN_DEVICE_FUNC bool isApprox(const AngleAxis& other, const typename NumTraits<Scalar>::Real& prec =
|
|
152
|
-
|
|
154
|
+
* determined by \a prec.
|
|
155
|
+
*
|
|
156
|
+
* \sa MatrixBase::isApprox() */
|
|
157
|
+
EIGEN_DEVICE_FUNC bool isApprox(const AngleAxis& other, const typename NumTraits<Scalar>::Real& prec =
|
|
158
|
+
NumTraits<Scalar>::dummy_precision()) const {
|
|
159
|
+
return m_axis.isApprox(other.m_axis, prec) && internal::isApprox(m_angle, other.m_angle, prec);
|
|
160
|
+
}
|
|
153
161
|
};
|
|
154
162
|
|
|
155
163
|
/** \ingroup Geometry_Module
|
|
156
|
-
|
|
164
|
+
* single precision angle-axis type */
|
|
157
165
|
typedef AngleAxis<float> AngleAxisf;
|
|
158
166
|
/** \ingroup Geometry_Module
|
|
159
|
-
|
|
167
|
+
* double precision angle-axis type */
|
|
160
168
|
typedef AngleAxis<double> AngleAxisd;
|
|
161
169
|
|
|
162
170
|
/** Set \c *this from a \b unit quaternion.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
template<typename Scalar>
|
|
169
|
-
template<typename QuatDerived>
|
|
170
|
-
EIGEN_DEVICE_FUNC AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const QuaternionBase<QuatDerived>& q)
|
|
171
|
-
{
|
|
171
|
+
*
|
|
172
|
+
* The resulting axis is normalized, and the computed angle is in the [0,pi] range.
|
|
173
|
+
*
|
|
174
|
+
* This function implicitly normalizes the quaternion \a q.
|
|
175
|
+
*/
|
|
176
|
+
template <typename Scalar>
|
|
177
|
+
template <typename QuatDerived>
|
|
178
|
+
EIGEN_DEVICE_FUNC AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const QuaternionBase<QuatDerived>& q) {
|
|
172
179
|
EIGEN_USING_STD(atan2)
|
|
173
180
|
EIGEN_USING_STD(abs)
|
|
174
181
|
Scalar n = q.vec().norm();
|
|
175
|
-
if(n<NumTraits<Scalar>::epsilon())
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
n = -n;
|
|
183
|
-
m_axis = q.vec() / n;
|
|
184
|
-
}
|
|
185
|
-
else
|
|
186
|
-
{
|
|
182
|
+
if (n < NumTraits<Scalar>::epsilon()) n = q.vec().stableNorm();
|
|
183
|
+
|
|
184
|
+
if (n != Scalar(0)) {
|
|
185
|
+
m_angle = Scalar(2) * atan2(n, abs(q.w()));
|
|
186
|
+
if (q.w() < Scalar(0)) n = -n;
|
|
187
|
+
m_axis = q.vec() / n;
|
|
188
|
+
} else {
|
|
187
189
|
m_angle = Scalar(0);
|
|
188
190
|
m_axis << Scalar(1), Scalar(0), Scalar(0);
|
|
189
191
|
}
|
|
@@ -191,57 +193,53 @@ EIGEN_DEVICE_FUNC AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const Quaterni
|
|
|
191
193
|
}
|
|
192
194
|
|
|
193
195
|
/** Set \c *this from a 3x3 rotation matrix \a mat.
|
|
194
|
-
|
|
195
|
-
template<typename Scalar>
|
|
196
|
-
template<typename Derived>
|
|
197
|
-
EIGEN_DEVICE_FUNC AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const MatrixBase<Derived>& mat)
|
|
198
|
-
{
|
|
196
|
+
*/
|
|
197
|
+
template <typename Scalar>
|
|
198
|
+
template <typename Derived>
|
|
199
|
+
EIGEN_DEVICE_FUNC AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const MatrixBase<Derived>& mat) {
|
|
199
200
|
// Since a direct conversion would not be really faster,
|
|
200
201
|
// let's use the robust Quaternion implementation:
|
|
201
202
|
return *this = QuaternionType(mat);
|
|
202
203
|
}
|
|
203
204
|
|
|
204
205
|
/**
|
|
205
|
-
* \brief Sets \c *this from a 3x3 rotation matrix.
|
|
206
|
-
**/
|
|
207
|
-
template<typename Scalar>
|
|
208
|
-
template<typename Derived>
|
|
209
|
-
EIGEN_DEVICE_FUNC AngleAxis<Scalar>& AngleAxis<Scalar>::fromRotationMatrix(const MatrixBase<Derived>& mat)
|
|
210
|
-
{
|
|
206
|
+
* \brief Sets \c *this from a 3x3 rotation matrix.
|
|
207
|
+
**/
|
|
208
|
+
template <typename Scalar>
|
|
209
|
+
template <typename Derived>
|
|
210
|
+
EIGEN_DEVICE_FUNC AngleAxis<Scalar>& AngleAxis<Scalar>::fromRotationMatrix(const MatrixBase<Derived>& mat) {
|
|
211
211
|
return *this = QuaternionType(mat);
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
/** Constructs and \returns an equivalent 3x3 rotation matrix.
|
|
215
|
-
|
|
216
|
-
template<typename Scalar>
|
|
217
|
-
typename AngleAxis<Scalar>::Matrix3
|
|
218
|
-
EIGEN_DEVICE_FUNC AngleAxis<Scalar>::toRotationMatrix(void) const
|
|
219
|
-
{
|
|
215
|
+
*/
|
|
216
|
+
template <typename Scalar>
|
|
217
|
+
typename AngleAxis<Scalar>::Matrix3 EIGEN_DEVICE_FUNC AngleAxis<Scalar>::toRotationMatrix(void) const {
|
|
220
218
|
EIGEN_USING_STD(sin)
|
|
221
219
|
EIGEN_USING_STD(cos)
|
|
222
220
|
Matrix3 res;
|
|
223
|
-
Vector3 sin_axis
|
|
221
|
+
Vector3 sin_axis = sin(m_angle) * m_axis;
|
|
224
222
|
Scalar c = cos(m_angle);
|
|
225
|
-
Vector3 cos1_axis = (Scalar(1)-c) * m_axis;
|
|
223
|
+
Vector3 cos1_axis = (Scalar(1) - c) * m_axis;
|
|
226
224
|
|
|
227
225
|
Scalar tmp;
|
|
228
226
|
tmp = cos1_axis.x() * m_axis.y();
|
|
229
|
-
res.coeffRef(0,1) = tmp - sin_axis.z();
|
|
230
|
-
res.coeffRef(1,0) = tmp + sin_axis.z();
|
|
227
|
+
res.coeffRef(0, 1) = tmp - sin_axis.z();
|
|
228
|
+
res.coeffRef(1, 0) = tmp + sin_axis.z();
|
|
231
229
|
|
|
232
230
|
tmp = cos1_axis.x() * m_axis.z();
|
|
233
|
-
res.coeffRef(0,2) = tmp + sin_axis.y();
|
|
234
|
-
res.coeffRef(2,0) = tmp - sin_axis.y();
|
|
231
|
+
res.coeffRef(0, 2) = tmp + sin_axis.y();
|
|
232
|
+
res.coeffRef(2, 0) = tmp - sin_axis.y();
|
|
235
233
|
|
|
236
234
|
tmp = cos1_axis.y() * m_axis.z();
|
|
237
|
-
res.coeffRef(1,2) = tmp - sin_axis.x();
|
|
238
|
-
res.coeffRef(2,1) = tmp + sin_axis.x();
|
|
235
|
+
res.coeffRef(1, 2) = tmp - sin_axis.x();
|
|
236
|
+
res.coeffRef(2, 1) = tmp + sin_axis.x();
|
|
239
237
|
|
|
240
238
|
res.diagonal() = (cos1_axis.cwiseProduct(m_axis)).array() + c;
|
|
241
239
|
|
|
242
240
|
return res;
|
|
243
241
|
}
|
|
244
242
|
|
|
245
|
-
}
|
|
243
|
+
} // end namespace Eigen
|
|
246
244
|
|
|
247
|
-
#endif
|
|
245
|
+
#endif // EIGEN_ANGLEAXIS_H
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// for linear algebra.
|
|
3
3
|
//
|
|
4
4
|
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
// Copyright (C) 2023 Juraj Oršulić, University of Zagreb <juraj.orsulic@fer.hr>
|
|
5
6
|
//
|
|
6
7
|
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
8
|
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
@@ -10,105 +11,193 @@
|
|
|
10
11
|
#ifndef EIGEN_EULERANGLES_H
|
|
11
12
|
#define EIGEN_EULERANGLES_H
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "./InternalHeaderCheck.h"
|
|
16
|
+
|
|
17
|
+
namespace Eigen {
|
|
18
|
+
|
|
19
|
+
/** \geometry_module \ingroup Geometry_Module
|
|
20
|
+
*
|
|
21
|
+
*
|
|
22
|
+
* \returns the canonical Euler-angles of the rotation matrix \c *this using the convention defined by the triplet (\a
|
|
23
|
+
* a0,\a a1,\a a2)
|
|
24
|
+
*
|
|
25
|
+
* Each of the three parameters \a a0,\a a1,\a a2 represents the respective rotation axis as an integer in {0,1,2}.
|
|
26
|
+
* For instance, in:
|
|
27
|
+
* \code Vector3f ea = mat.eulerAngles(2, 0, 2); \endcode
|
|
28
|
+
* "2" represents the z axis and "0" the x axis, etc. The returned angles are such that
|
|
29
|
+
* we have the following equality:
|
|
30
|
+
* \code
|
|
31
|
+
* mat == AngleAxisf(ea[0], Vector3f::UnitZ())
|
|
32
|
+
* * AngleAxisf(ea[1], Vector3f::UnitX())
|
|
33
|
+
* * AngleAxisf(ea[2], Vector3f::UnitZ()); \endcode
|
|
34
|
+
* This corresponds to the right-multiply conventions (with right hand side frames).
|
|
35
|
+
*
|
|
36
|
+
* For Tait-Bryan angle configurations (a0 != a2), the returned angles are in the ranges [-pi:pi]x[-pi/2:pi/2]x[-pi:pi].
|
|
37
|
+
* For proper Euler angle configurations (a0 == a2), the returned angles are in the ranges [-pi:pi]x[0:pi]x[-pi:pi].
|
|
38
|
+
*
|
|
39
|
+
* The approach used is also described here:
|
|
40
|
+
* https://d3cw3dd2w32x2b.cloudfront.net/wp-content/uploads/2012/07/euler-angles.pdf
|
|
41
|
+
*
|
|
42
|
+
* \sa class AngleAxis
|
|
43
|
+
*/
|
|
44
|
+
template <typename Derived>
|
|
45
|
+
EIGEN_DEVICE_FUNC inline Matrix<typename MatrixBase<Derived>::Scalar, 3, 1> MatrixBase<Derived>::canonicalEulerAngles(
|
|
46
|
+
Index a0, Index a1, Index a2) const {
|
|
47
|
+
/* Implemented from Graphics Gems IV */
|
|
48
|
+
EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived, 3, 3)
|
|
49
|
+
|
|
50
|
+
Matrix<Scalar, 3, 1> res;
|
|
51
|
+
|
|
52
|
+
const Index odd = ((a0 + 1) % 3 == a1) ? 0 : 1;
|
|
53
|
+
const Index i = a0;
|
|
54
|
+
const Index j = (a0 + 1 + odd) % 3;
|
|
55
|
+
const Index k = (a0 + 2 - odd) % 3;
|
|
56
|
+
|
|
57
|
+
if (a0 == a2) {
|
|
58
|
+
// Proper Euler angles (same first and last axis).
|
|
59
|
+
// The i, j, k indices enable addressing the input matrix as the XYX archetype matrix (see Graphics Gems IV),
|
|
60
|
+
// where e.g. coeff(k, i) means third column, first row in the XYX archetype matrix:
|
|
61
|
+
// c2 s2s1 s2c1
|
|
62
|
+
// s2s3 -c2s1s3 + c1c3 -c2c1s3 - s1c3
|
|
63
|
+
// -s2c3 c2s1c3 + c1s3 c2c1c3 - s1s3
|
|
64
|
+
|
|
65
|
+
// Note: s2 is always positive.
|
|
66
|
+
Scalar s2 = numext::hypot(coeff(j, i), coeff(k, i));
|
|
67
|
+
if (odd) {
|
|
68
|
+
res[0] = numext::atan2(coeff(j, i), coeff(k, i));
|
|
69
|
+
// s2 is always positive, so res[1] will be within the canonical [0, pi] range
|
|
70
|
+
res[1] = numext::atan2(s2, coeff(i, i));
|
|
71
|
+
} else {
|
|
72
|
+
// In the !odd case, signs of all three angles are flipped at the very end. To keep the solution within the
|
|
73
|
+
// canonical range, we flip the solution and make res[1] always negative here (since s2 is always positive,
|
|
74
|
+
// -atan2(s2, c2) will always be negative). The final flip at the end due to !odd will thus make res[1] positive
|
|
75
|
+
// and canonical. NB: in the general case, there are two correct solutions, but only one is canonical. For proper
|
|
76
|
+
// Euler angles, flipping from one solution to the other involves flipping the sign of the second angle res[1] and
|
|
77
|
+
// adding/subtracting pi to the first and third angles. The addition/subtraction of pi to the first angle res[0]
|
|
78
|
+
// is handled here by flipping the signs of arguments to atan2, while the calculation of the third angle does not
|
|
79
|
+
// need special adjustment since it uses the adjusted res[0] as the input and produces a correct result.
|
|
80
|
+
res[0] = numext::atan2(-coeff(j, i), -coeff(k, i));
|
|
81
|
+
res[1] = -numext::atan2(s2, coeff(i, i));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// With a=(0,1,0), we have i=0; j=1; k=2, and after computing the first two angles,
|
|
85
|
+
// we can compute their respective rotation, and apply its inverse to M. Since the result must
|
|
86
|
+
// be a rotation around x, we have:
|
|
87
|
+
//
|
|
88
|
+
// c2 s1.s2 c1.s2 1 0 0
|
|
89
|
+
// 0 c1 -s1 * M = 0 c3 s3
|
|
90
|
+
// -s2 s1.c2 c1.c2 0 -s3 c3
|
|
91
|
+
//
|
|
92
|
+
// Thus: m11.c1 - m21.s1 = c3 & m12.c1 - m22.s1 = s3
|
|
93
|
+
|
|
94
|
+
Scalar s1 = numext::sin(res[0]);
|
|
95
|
+
Scalar c1 = numext::cos(res[0]);
|
|
96
|
+
res[2] = numext::atan2(c1 * coeff(j, k) - s1 * coeff(k, k), c1 * coeff(j, j) - s1 * coeff(k, j));
|
|
97
|
+
} else {
|
|
98
|
+
// Tait-Bryan angles (all three axes are different; typically used for yaw-pitch-roll calculations).
|
|
99
|
+
// The i, j, k indices enable addressing the input matrix as the XYZ archetype matrix (see Graphics Gems IV),
|
|
100
|
+
// where e.g. coeff(k, i) means third column, first row in the XYZ archetype matrix:
|
|
101
|
+
// c2c3 s2s1c3 - c1s3 s2c1c3 + s1s3
|
|
102
|
+
// c2s3 s2s1s3 + c1c3 s2c1s3 - s1c3
|
|
103
|
+
// -s2 c2s1 c2c1
|
|
104
|
+
|
|
105
|
+
res[0] = numext::atan2(coeff(j, k), coeff(k, k));
|
|
106
|
+
|
|
107
|
+
Scalar c2 = numext::hypot(coeff(i, i), coeff(i, j));
|
|
108
|
+
// c2 is always positive, so the following atan2 will always return a result in the correct canonical middle angle
|
|
109
|
+
// range [-pi/2, pi/2]
|
|
110
|
+
res[1] = numext::atan2(-coeff(i, k), c2);
|
|
111
|
+
|
|
112
|
+
Scalar s1 = numext::sin(res[0]);
|
|
113
|
+
Scalar c1 = numext::cos(res[0]);
|
|
114
|
+
res[2] = numext::atan2(s1 * coeff(k, i) - c1 * coeff(j, i), c1 * coeff(j, j) - s1 * coeff(k, j));
|
|
115
|
+
}
|
|
116
|
+
if (!odd) {
|
|
117
|
+
res = -res;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return res;
|
|
121
|
+
}
|
|
14
122
|
|
|
15
123
|
/** \geometry_module \ingroup Geometry_Module
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
*
|
|
31
|
-
* The returned angles are in the ranges [0:pi]x[-pi:pi]x[-pi:pi].
|
|
32
|
-
*
|
|
33
|
-
* \sa class AngleAxis
|
|
34
|
-
*/
|
|
35
|
-
template<typename Derived>
|
|
36
|
-
EIGEN_DEVICE_FUNC inline Matrix<typename MatrixBase<Derived>::Scalar,3,1>
|
|
37
|
-
MatrixBase<Derived>::eulerAngles(Index a0, Index a1, Index a2) const
|
|
38
|
-
{
|
|
39
|
-
EIGEN_USING_STD(atan2)
|
|
40
|
-
EIGEN_USING_STD(sin)
|
|
41
|
-
EIGEN_USING_STD(cos)
|
|
124
|
+
*
|
|
125
|
+
*
|
|
126
|
+
* \returns the Euler-angles of the rotation matrix \c *this using the convention defined by the triplet (\a a0,\a a1,\a
|
|
127
|
+
* a2)
|
|
128
|
+
*
|
|
129
|
+
* NB: The returned angles are in non-canonical ranges [0:pi]x[-pi:pi]x[-pi:pi]. For canonical Tait-Bryan/proper Euler
|
|
130
|
+
* ranges, use canonicalEulerAngles.
|
|
131
|
+
*
|
|
132
|
+
* \sa MatrixBase::canonicalEulerAngles
|
|
133
|
+
* \sa class AngleAxis
|
|
134
|
+
*/
|
|
135
|
+
template <typename Derived>
|
|
136
|
+
EIGEN_DEVICE_FUNC inline Matrix<typename MatrixBase<Derived>::Scalar, 3, 1> MatrixBase<Derived>::eulerAngles(
|
|
137
|
+
Index a0, Index a1, Index a2) const {
|
|
42
138
|
/* Implemented from Graphics Gems IV */
|
|
43
|
-
EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived,3,3)
|
|
139
|
+
EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived, 3, 3)
|
|
44
140
|
|
|
45
|
-
Matrix<Scalar,3,1> res;
|
|
46
|
-
typedef Matrix<typename Derived::Scalar,2,1> Vector2;
|
|
141
|
+
Matrix<Scalar, 3, 1> res;
|
|
47
142
|
|
|
48
|
-
const Index odd = ((a0+1)%3 == a1) ? 0 : 1;
|
|
143
|
+
const Index odd = ((a0 + 1) % 3 == a1) ? 0 : 1;
|
|
49
144
|
const Index i = a0;
|
|
50
|
-
const Index j = (a0 + 1 + odd)%3;
|
|
51
|
-
const Index k = (a0 + 2 - odd)%3;
|
|
52
|
-
|
|
53
|
-
if (a0==a2)
|
|
54
|
-
|
|
55
|
-
res[0]
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
if(res[0] > Scalar(0)) {
|
|
145
|
+
const Index j = (a0 + 1 + odd) % 3;
|
|
146
|
+
const Index k = (a0 + 2 - odd) % 3;
|
|
147
|
+
|
|
148
|
+
if (a0 == a2) {
|
|
149
|
+
res[0] = numext::atan2(coeff(j, i), coeff(k, i));
|
|
150
|
+
if ((odd && res[0] < Scalar(0)) || ((!odd) && res[0] > Scalar(0))) {
|
|
151
|
+
if (res[0] > Scalar(0)) {
|
|
59
152
|
res[0] -= Scalar(EIGEN_PI);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
153
|
+
} else {
|
|
62
154
|
res[0] += Scalar(EIGEN_PI);
|
|
63
155
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
else
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
res[1] = atan2(s2, coeff(i,i));
|
|
156
|
+
|
|
157
|
+
Scalar s2 = numext::hypot(coeff(j, i), coeff(k, i));
|
|
158
|
+
res[1] = -numext::atan2(s2, coeff(i, i));
|
|
159
|
+
} else {
|
|
160
|
+
Scalar s2 = numext::hypot(coeff(j, i), coeff(k, i));
|
|
161
|
+
res[1] = numext::atan2(s2, coeff(i, i));
|
|
71
162
|
}
|
|
72
|
-
|
|
163
|
+
|
|
73
164
|
// With a=(0,1,0), we have i=0; j=1; k=2, and after computing the first two angles,
|
|
74
165
|
// we can compute their respective rotation, and apply its inverse to M. Since the result must
|
|
75
166
|
// be a rotation around x, we have:
|
|
76
167
|
//
|
|
77
|
-
// c2 s1.s2 c1.s2 1 0 0
|
|
168
|
+
// c2 s1.s2 c1.s2 1 0 0
|
|
78
169
|
// 0 c1 -s1 * M = 0 c3 s3
|
|
79
170
|
// -s2 s1.c2 c1.c2 0 -s3 c3
|
|
80
171
|
//
|
|
81
172
|
// Thus: m11.c1 - m21.s1 = c3 & m12.c1 - m22.s1 = s3
|
|
82
|
-
|
|
83
|
-
Scalar s1 = sin(res[0]);
|
|
84
|
-
Scalar c1 = cos(res[0]);
|
|
85
|
-
res[2] = atan2(c1*coeff(j,k)-s1*coeff(k,k), c1*coeff(j,j) - s1 * coeff(k,j));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
res[0]
|
|
90
|
-
|
|
91
|
-
if((odd && res[0]<Scalar(0)) || ((!odd) && res[0]>Scalar(0))) {
|
|
92
|
-
if(res[0] > Scalar(0)) {
|
|
173
|
+
|
|
174
|
+
Scalar s1 = numext::sin(res[0]);
|
|
175
|
+
Scalar c1 = numext::cos(res[0]);
|
|
176
|
+
res[2] = numext::atan2(c1 * coeff(j, k) - s1 * coeff(k, k), c1 * coeff(j, j) - s1 * coeff(k, j));
|
|
177
|
+
} else {
|
|
178
|
+
res[0] = numext::atan2(coeff(j, k), coeff(k, k));
|
|
179
|
+
Scalar c2 = numext::hypot(coeff(i, i), coeff(i, j));
|
|
180
|
+
if ((odd && res[0] < Scalar(0)) || ((!odd) && res[0] > Scalar(0))) {
|
|
181
|
+
if (res[0] > Scalar(0)) {
|
|
93
182
|
res[0] -= Scalar(EIGEN_PI);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
183
|
+
} else {
|
|
96
184
|
res[0] += Scalar(EIGEN_PI);
|
|
97
185
|
}
|
|
98
|
-
res[1] = atan2(-coeff(i,k), -c2);
|
|
186
|
+
res[1] = numext::atan2(-coeff(i, k), -c2);
|
|
187
|
+
} else {
|
|
188
|
+
res[1] = numext::atan2(-coeff(i, k), c2);
|
|
99
189
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
Scalar c1 = cos(res[0]);
|
|
104
|
-
res[2] = atan2(s1*coeff(k,i)-c1*coeff(j,i), c1*coeff(j,j) - s1 * coeff(k,j));
|
|
190
|
+
Scalar s1 = numext::sin(res[0]);
|
|
191
|
+
Scalar c1 = numext::cos(res[0]);
|
|
192
|
+
res[2] = numext::atan2(s1 * coeff(k, i) - c1 * coeff(j, i), c1 * coeff(j, j) - s1 * coeff(k, j));
|
|
105
193
|
}
|
|
106
|
-
if (!odd)
|
|
194
|
+
if (!odd) {
|
|
107
195
|
res = -res;
|
|
108
|
-
|
|
196
|
+
}
|
|
197
|
+
|
|
109
198
|
return res;
|
|
110
199
|
}
|
|
111
200
|
|
|
112
|
-
}
|
|
201
|
+
} // end namespace Eigen
|
|
113
202
|
|
|
114
|
-
#endif
|
|
203
|
+
#endif // EIGEN_EULERANGLES_H
|