Matrix3.hh
Go to the documentation of this file.
33 using OnlyIfNotOrSameQuantity = typename std::enable_if < !IsQuantity<Value_2>::value || std::is_same<Value_, Value_2>::value >::type;
69 Matrix3(Vector3<Value_> const &x, Vector3<Value_> const &y, Vector3<Value_> const &z, Matrix matrix = Matrix::row)
86 Matrix3(Vector3<Value_> const &vector_1, Vector3<Value_> const &vector_2, Matrix matrix = Matrix::symmetric)
143 *this = 2 * (Matrix3(sqr(quaternion.fRealPart)) + Matrix3(Vector3<double>(quaternion.fVectorPart), Vector3<double>(quaternion.fVectorPart)) - Matrix3(Vector3<double>(quaternion.fVectorPart * quaternion.fRealPart)));
298 Matrix3 &SetEulerAngles(Angle const &phi, Angle const &theta, Angle const &psi, Dim2 dim = Dim2::x)
417 if (UpperTriangle() == -LowerTriangle() && Diagonal() == Vector3<Value_> {0, 0, 0}) return Matrix::antisymmetric;
731 constexpr Matrix3 &RotateAxes(Vector3<Value_> const &vector_x, Vector3<Value_> const &vector_y, Vector3<Value_> const &vector_z)
735 if (std::abs(vector_z.X() - cross.X()) > epsilon || std::abs(vector_z.Y() - cross.Y()) > epsilon || std::abs(vector_z.Z() - cross.Z()) > epsilon || std::abs(vector_x.Mag2() - 1) > epsilon || std::abs(vector_y.Mag2() - 1) > epsilon || std::abs(vector_z.Mag2() - 1) > epsilon || std::abs(vector_x.Dot(vector_y)) > epsilon || std::abs(vector_y.Dot(vector_z)) > epsilon || std::abs(vector_z.Dot(vector_x)) > epsilon) {
739 return Transform(Matrix3(vector_x.X(), vector_y.X(), vector_z.X(), vector_x.Y(), vector_y.Y(), vector_z.Y(), vector_x.Z(), vector_y.Z(), vector_z.Z()));
746 constexpr Matrix3 &RotateEulerAngles(Angle const &phi, Angle const &theta, Angle const &psi, Dim2 dim = Dim2::x)
783 return {{x_ * matrix.ColumnX(), x_ * matrix.ColumnY(), x_ * matrix.ColumnZ()}, {y_ * matrix.ColumnX(), y_ * matrix.ColumnY(), y_ * matrix.ColumnZ()}, {z_ * matrix.ColumnX(), z_ * matrix.ColumnY(), z_ * matrix.ColumnZ()}};
1191 for (auto const index : IntegerRange(system.size())) system.at(index) = {Vectors().at(index), Values().at(index)};
1209 return Factor() * cos((Angle() - TwoPiRad() * static_cast<double>(index)) / 3.) + matrix_->Trace() / 3;
1215 return Vector3<Value_>(matrix.Cofactor(Dim3::x, Dim3::x), matrix.Cofactor(Dim3::x, Dim3::y), matrix.Cofactor(Dim3::x, Dim3::z)).Unit();
1382 constexpr Matrix3<ValueProduct<Value_, Value_2_>> operator*(Vector3<Value_2_> const &vector, Matrix3<Value_> const &matrix)
1384 return {vector.X() *matrix.ColumnX(), vector.Y() *matrix.ColumnY(), vector.Z() *matrix.ColumnZ()};
1391 constexpr Matrix3<ValueProduct<Value_1_, Value_2_>> MatrixProduct(Vector3<Value_1_> const &vector_1, Vector3<Value_2_> const &vector_2)
auto & Transform(Matrix3< Value_2_ > const &matrix)
Transformation with a Rotation matrix.
Definition: Matrix3.hh:1415
Vector3< Value_ > & operator()(Dim3 dim)
Components by index.
Definition: Matrix3.hh:939
Matrix3 & SetEulerAngles(Angle const &phi, Angle const &theta, Angle const &psi, Dim2 dim=Dim2::x)
Set the Euler angles.
Definition: Matrix3.hh:298
auto SubMatrix(Dim3 delete_1, Dim3 delete_2) const
Sub matrix .
Definition: Matrix3.hh:650
Enables the use of strongly typed enumerators as iterators.
Definition: EnumIterator.hh:17
typename boost::units::multiply_typeof_helper< ValueSquare< Value >, Value >::type ValueCubed
Definition: Units.hh:149
constexpr ConstSubIterator< boca::Matrix3, Vector3, Value_ > end() const
Const end.
Definition: Matrix3.hh:1025
Boost provides free peer-reviewed portable C++ source libraries.
Definition: LorentzVectorBase.hh:726
constexpr ConstSubIterator< boca::Matrix3, Vector3, Value_ > begin() const
Const begin.
Definition: Matrix3.hh:1017
constexpr auto Cofactor(Dim3 dim_1, Dim3 dim_2) const
Cofactor .
Definition: Matrix3.hh:527
constexpr Matrix3 & RotateAxes(Vector3< Value_ > const &vector_x, Vector3< Value_ > const &vector_y, Vector3< Value_ > const &vector_z)
Rotation of local axes.
Definition: Matrix3.hh:731
Matrix3 & operator-=(Matrix3< Value_2_ > const &matrix)
Substraction.
Definition: Matrix3.hh:862
constexpr Vector3< Value_ > Diagonal()
vector of the diagonal
Definition: Matrix3.hh:453
boost::units::quantity< boost::units::si::plane_angle > Angle
Angle measured in radian.
Definition: Si.hh:35
constexpr auto ReducedDeterminant(Dim3 dim_1, Dim3 dim_2) const
Reduced determinant .
Definition: Matrix3.hh:543
constexpr Vector3< ValueProduct< Value_2_ > > operator*(Vector3< Value_2_ > const &vector) const
Multiplication with a Vector.
Definition: Matrix3.hh:892
constexpr Vector3< Value_ > ColumnX() const
x-column
Definition: Matrix3.hh:429
constexpr Matrix3 & MoveTo(Dim3 dim_1, Dim3 dim_2)
Move row cyclic from dim1 to dim 2.
Definition: Matrix3.hh:671
Matrix3 & SetDiagonal(Value_ value)
Set the diagonal to uniform value.
Definition: Matrix3.hh:171
constexpr Array3< Vector3< Value_ > > EigenVectors() const
Eigen vectors.
Definition: Matrix3.hh:1064
Matrix3 & SetDiagonal(Vector3< Value_ > vector)
Set the diagonal to given vector.
Definition: Matrix3.hh:182
Matrix3 & SetUniform(Value_ value)
Set the matrix to uniform value.
Definition: Matrix3.hh:225
constexpr auto Sign(Dim3 i, Dim3 j) const
Sign of a given element .
Definition: Matrix3.hh:484
void SetRow(Vector3< Value_ > const &vector, Dim3 dim)
Set a row according to vector and direction.
Definition: Matrix3.hh:246
constexpr Vector3< Value_ > ColumnY() const
y-column
Definition: Matrix3.hh:437
Vector3 & operator*=(Value_2_ scalar)
Scaling with real numbers.
Definition: Vector3.hh:633
constexpr Matrix3 & Rotate(Angle const &phi, Dim3 dim)
Rotate by phi around axis dim.
Definition: Matrix3.hh:702
constexpr ValueSquare Mag2() const
The magnitude squared .
Definition: Vector3.hh:385
void SetRows(Vector3< Value_ > const &x, Vector3< Value_ > const &y, Vector3< Value_ > const &z)
Set the rows according to given vectors.
Definition: Matrix3.hh:236
constexpr Matrix3< ValueProduct< Value_2_ > > & Transformed(Matrix3< Value_2_ > const &matrix)
Transform this matrix by another.
Definition: Matrix3.hh:817
void SetAntisymmetric(Vector3< Value_ > const &vector)
Fill the matrix antisymmetrically with the values of the vector.
Definition: Matrix3.hh:286
slighly more complicated estimator for significance
boca::ConstSubIterator< boca::Matrix3, boca::Vector3, Value_ > type
Definition: Matrix3.hh:1437
Vector3< double > Unit() const
Unit vector parallel to this.
Definition: Vector3.hh:517
constexpr Vector3< ValueProduct< Value_2_ > > Cross(Vector3< Value_2_ > const &vector) const
Cross product between two vector.
Definition: Vector3.hh:571
constexpr Matrix3< ValueQuotient< Value_2_ > > operator/(Value_2_ scalar) const
Division by scalar.
Definition: Matrix3.hh:913
void SetPhi(Angle const &phi, Dim2 dim=Dim2::x)
Set phi.
Definition: Matrix3.hh:320
SubIterator< boca::Matrix3, Vector3, Value_ > end()
End.
Definition: Matrix3.hh:1041
constexpr Matrix3 Transposed() const
transposed matrix
Definition: Matrix3.hh:619
constexpr Vector3< Value_ > LowerTriangle()
vector of lower triangle
Definition: Matrix3.hh:469
void SetColumns(Vector3< Value_ > const &x, Vector3< Value_ > const &y, Vector3< Value_ > const &z)
Set columns according to given vectors.
Definition: Matrix3.hh:266
Matrix3 & SetAxis(Vector3< Value_ > const &axis, Dim3 dim)
Set axis.
Definition: Matrix3.hh:345
void SetTheta(Angle const &theta, Dim2 dim=Dim2::x)
Set theta.
Definition: Matrix3.hh:328
Matrix3(Vector3< Value_ > const &x, Vector3< Value_ > const &y, Vector3< Value_ > const &z, Matrix matrix=Matrix::row)
Constructor accepting three vectors.
Definition: Matrix3.hh:69
constexpr Vector3< Value_ > UpperTriangle()
vector of upper triangle
Definition: Matrix3.hh:461
constexpr Matrix2< ValueProduct< Value_1_, Value_2_ > > MatrixProduct(Vector2< Value_1_ > const &vector_1, Vector2< Value_2_ > const &vector_2)
Definition: Matrix2.hh:703
constexpr Array3< GradedVector3< Value_ > > EigenSystem() const
Eigen system.
Definition: Matrix3.hh:1072
Matrix3 & SetUpperTriangle(Vector3< Value_ > vector)
vector of upper triangle
Definition: Matrix3.hh:193
boost::units::make_system< boost::units::metric::barn_base_unit >::type System
Definition: Barn.hh:22
constexpr Array3< Value_ > EigenValues() const
Eigen values.
Definition: Matrix3.hh:1056
Vector3< Value_ > & operator[](Dim3 dim_3)
Components by index.
Definition: Matrix3.hh:991
constexpr Matrix3< ValueInverse > Inverse()
Inverse matrix.
Definition: Matrix3.hh:637
typename std::enable_if< !IsMatrix3< Value >::value >::type OnlyIfNotMatrix3
Definition: Matrix3.hh:1349
constexpr Matrix3 & operator*=(Matrix3< Value_2_ > const &matrix)
Multiplication with a matrix.
Definition: Matrix3.hh:874
SubIterator< boca::Matrix3, Vector3, Value_ > begin()
Begin.
Definition: Matrix3.hh:1033
constexpr Matrix3 & Transpose()
transpose this matrix
Definition: Matrix3.hh:627
Vector3 & Rotate(boca::Angle const &phi, Dim3 dim_1, Dim3 dim_2)
Rotate by phi in (dim_1, dim_2) plain.
Definition: Vector3.hh:445
constexpr Vector3< Value_ > ColumnZ() const
z-column
Definition: Matrix3.hh:445
Matrix3 & operator+=(Matrix3< Value_2_ > const &matrix)
Addition.
Definition: Matrix3.hh:850
Matrix3 & SetToIdentity()
Set to the diagonal to identiy.
Definition: Matrix3.hh:215
Matrix3(Vector3< Value_ > const &vector, Matrix matrix=Matrix::antisymmetric)
Constructor accepting one vector.
Definition: Matrix3.hh:100
void SetPsi(Angle const &psi, Dim2 dim=Dim2::x)
Set psi.
Definition: Matrix3.hh:336
Matrix3< ValueQuotient< Value_2_ > > operator/=(Value_2_ scalar)
Division by scalar.
Definition: Matrix3.hh:901
constexpr Matrix3 & RotateEulerAngles(Angle const &phi, Angle const &theta, Angle const &psi, Dim2 dim=Dim2::x)
Set the euler angles of the rotation.
Definition: Matrix3.hh:746
Matrix3 & SetLowerTriangle(Vector3< Value_ > vector)
vector of lower triangle
Definition: Matrix3.hh:204
constexpr Vector3< Value_ > const & operator[](Dim3 dim_3) const
Components by index.
Definition: Matrix3.hh:973
Matrix3(Vector3< Value_ > const &vector_1, Vector3< Value_ > const &vector_2, Matrix matrix=Matrix::symmetric)
Constructor accepting two vectors.
Definition: Matrix3.hh:86
typename boost::units::multiply_typeof_helper< Value, Value >::type ValueSquare
Definition: Units.hh:143
Definition: Matrix3.hh:1343
Matrix3 & SetAxis(Vector3< Value_ > const &axis, Vector3< Value_ > const &plane, Dim3 dim)
Set axis.
Definition: Matrix3.hh:354
constexpr Value_ operator()(Dim3 i, Dim3 j) const
Components by index.
Definition: Matrix3.hh:957
constexpr ValueProduct< Value_2_ > Dot(Vector3< Value_2_ > const &vector) const
Dot product between two vector.
Definition: Vector3.hh:562
void SetColumn(Vector3< Value_ > const &vector, Dim3 dim)
Set a column according to vector and its direction.
Definition: Matrix3.hh:276
Matrix3 & Rotate(Angle const &phi, Dim3 dim_1, Dim3 dim_2)
Rotate by phi in (dim_1, dim_2) plain.
Definition: Matrix3.hh:688
constexpr Matrix3< ValueProduct< Value_2_ > > Multiply(Matrix3< Value_2_ > const &matrix) const
Multiplication with a matrix.
Definition: Matrix3.hh:781
std::pair< Vector3< Value_ >, Angle > AngleAxis() const
rotation defined by an angle and a vector
Definition: Matrix3.hh:756
constexpr bool operator==(Matrix3 const &matrix) const
Equality comnparison.
Definition: Matrix3.hh:841
constexpr Matrix3< ValueProduct< Value_2_ > > Scale(Value_2_ scalar) const
Scale by scalar.
Definition: Matrix3.hh:799
constexpr Matrix3(Matrix3< Value_2 > const &matrix)
Copy construct with casting.
Definition: Matrix3.hh:155
constexpr auto Determinant() const
Determinant .
Definition: Matrix3.hh:509
constexpr Matrix3< ValueProduct< Value_2_ > > & Transform(Matrix3< Value_2_ > const &matrix)
Transform this matrix by another.
Definition: Matrix3.hh:808
constexpr auto ProductTrace(Matrix3< Value_2_ > const &matrix) const
Trace of the product of two matrices .
Definition: Matrix3.hh:501
constexpr Vector3< Value_ > const & operator()(Dim3 dim) const
Components by index.
Definition: Matrix3.hh:921
constexpr bool operator<(Matrix3 const &matrix) const
Less than comparison according to the absolute value of the determinant.
Definition: Matrix3.hh:833
boca::SubIterator< boca::Matrix3, boca::Vector3, Value_ > type
Definition: Matrix3.hh:1442
Matrix3 & Rotate(Angle const &phi, Vector3< Value_ > const &axis)
Rotation by phi around axis.
Definition: Matrix3.hh:719
constexpr auto Laplace(Dim3 dim_1, Dim3 dim_2) const
Laplace .
Definition: Matrix3.hh:519
Matrix3(Value_ scalar, Matrix matrix=Matrix::diagonal)
Constructor accepting a scalar.
Definition: Matrix3.hh:52
Matrix3(TQuaternion const &quaternion)
Constructor accepting a root::TQuaternion.
Definition: Matrix3.hh:138
constexpr Vector3< ValueProduct< Value_2_ > > Multiply(Vector3< Value_2_ > const &vector) const
Multiplication with a Vector.
Definition: Matrix3.hh:790
constexpr Matrix3< ValueProduct< Value_2_ > > operator*(Matrix3< Value_2_ > const &matrix) const
Multiplication with a matrix.
Definition: Matrix3.hh:883
constexpr auto Minor(Dim3 delete_1, Dim3 delete_2) const
Minor .
Definition: Matrix3.hh:535
Matrix3(Vector3< Value_ > const &vector, Dim3 dim, Matrix matrix=Matrix::row)
Constructor accepting one vector and its direction.
Definition: Matrix3.hh:117
Value_ & operator()(Dim3 i, Dim3 j)
Components by index.
Definition: Matrix3.hh:965