1#ifndef RIVET_MATH_MATRIX3
2#define RIVET_MATH_MATRIX3
4#include "Rivet/Math/MathConstants.hh"
5#include "Rivet/Math/MathUtils.hh"
6#include "Rivet/Math/MatrixN.hh"
7#include "Rivet/Math/Vector3.hh"
13 class Matrix3 :
public Matrix<3> {
18 Matrix3(
const Matrix<3>& m3)
19 : Matrix<3>::Matrix(m3) { }
23 _matrix = RivetEigen::AngleAxis<double>(
angle, normaxis._vec);
27 setAsRotation(from, to);
30 static Matrix3 mkXRotation(
const double angle) {
34 static Matrix3 mkYRotation(
const double angle) {
38 static Matrix3 mkZRotation(
const double angle) {
43 const double theta =
angle(from, to);
45 _matrix = EMatrix::Identity();
49 _matrix = RivetEigen::AngleAxis<double>(theta, normaxis._vec);
54 static Matrix3 mkRotation(
const Vector3& from,
const Vector3& to) {
56 rtn.setAsRotation(from, to);
Three-dimensional specialisation of Vector.
Definition Vector3.hh:39
Vector3 unit() const
Synonym for unitVec.
Definition Vector3.hh:154
Definition LHCbCommon.hh:9
std::enable_if_t< std::is_floating_point_v< NUM >, bool > isZero(NUM val, double tolerance=1e-8)
Compare a number to zero.
Definition MathUtils.hh:23
Vector3 cross(const Vector3 &a, const Vector3 &b)
Unbound cross-product function.
Definition Vector3.hh:310
double angle(const Vector2 &a, const Vector2 &b)
Angle (in radians) between two 2-vectors.
Definition Vector2.hh:194