2900 const T cosphi = 0.5 * (
R(1, 1) +
R(2, 2) +
R(3, 3) - 1.);
2903 unit(1) = 0.5*(
R(3, 2) -
R(2, 3));
2904 unit(2) = 0.5*(
R(1, 3) -
R(3, 1));
2905 unit(3) = 0.5*(
R(2, 1) -
R(1, 2));
2907 const T sinphi2 =
Dot(unit, unit);
2911 sinphi =
sqrt(sinphi2);
2916 const T phi =
atan2(sinphi, cosphi);
2923 eet(1, 1) -= cosphi;
2924 eet(2, 2) -= cosphi;
2925 eet(3, 3) -= cosphi;
2928 if (eet(2, 2) > eet(1, 1)) {
2931 if (eet(3, 3) > eet(maxcol, maxcol)) {
2934 unit = (eet.GetCol(maxcol)/
sqrt(eet(maxcol, maxcol)*(1. - cosphi)));
2937 sinphi -=
Cross(unit,
R.GetCol(i))(i) * 0.5;
2940 unit *=
atan2(sinphi, cosphi);
MatrixExpression< TransposedMatrix< MatrixDirectExpr< Matrix< T, N_rows, N_cols > > >, N_cols, N_rows > Transpose(const Matrix< T, N_rows, N_cols > &A)
const MatrixExpression< MatrixExpr, 3, 3 > R
static void RotCo(const T &phi, T &cf)
DotTraits< VectorExprLhs, VectorExprRhs, N_rows, N_rows >::ExpressionType Dot(const VectorExpression< VectorExprLhs, N_rows > &u, const VectorExpression< VectorExprRhs, N_rows > &v)
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
VectorExpression< VectorCrossExpr< VectorLhsExpr, VectorRhsExpr >, 3 > Cross(const VectorExpression< VectorLhsExpr, 3 > &u, const VectorExpression< VectorRhsExpr, 3 > &v)
static const doublereal a
GradientExpression< BinaryExpr< FuncAtan2, LhsExpr, RhsExpr > > atan2(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)