63 if ( std::fabs(
uX ) < 8.*std::numeric_limits<double>::epsilon() &&
64 std::fabs(
uY ) < 8.*std::numeric_limits<double>::epsilon() &&
65 std::fabs(
uZ ) < 8.*std::numeric_limits<double>::epsilon() ) {
116 double phi, theta,
psi;
121 theta = (std::fabs(
r[
kZZ]) <= 1.0) ? std::acos(
r[
kZZ]) :
122 (
r[
kZZ] > 0.0) ? 0 : pi;
162 double maxw = std::fabs(
w[0]);
164 for (
int i = 1; i < 4; ++i) {
165 if (std::fabs(
w[i]) >
maxw) {
166 maxw = std::fabs(
w[i]);
212 const double q0 = .5*std::sqrt(1+
d0);
213 const double f = .25/q0;
220 }
else if (
d1 >=
d2 &&
d1 >=
d3 ) {
221 const double q1 = .5*std::sqrt(1+
d1);
222 const double f = .25/
q1;
229 }
else if (
d2 >=
d3 ) {
230 const double q2 = .5*std::sqrt(1+
d2);
231 const double f = .25/
q2;
239 const double q3 = .5*std::sqrt(1+
d3);
240 const double f = .25/
q3;
265 double phi,theta,
psi = 0;
313 double maxw = std::fabs(
w[0]);
315 for (
int i = 1; i < 4; ++i) {
316 if (std::fabs(
w[i]) >
maxw) {
317 maxw = std::fabs(
w[i]);
359 const double uX =
u.X();
360 const double uY =
u.Y();
361 const double uZ =
u.Z();
394 double s = std::sin (from.
Angle()/2);
479 const double q0 = from.
U();
480 const double q1 = from.
I();
481 const double q2 = from.
J();
482 const double q3 = from.
K();
483 const double q00 = q0*q0;
484 const double q01 = q0*
q1;
485 const double q02 = q0*
q2;
486 const double q03 = q0*
q3;
508 const double angle = 2.0 * std::acos ( from.
U() );
510 axis (from.
I(), from.
J(), from.
K());
513 if (
u < -1 )
u = -1;
514 const double angle = 2.0 * std::acos ( -from.
U() );
516 axis (-from.
I(), -from.
J(), -from.
K());
546 double phi,theta,
psi = 0;
549 - std::cos(theta)*std::sin(phi),
552 std::cos(
psi)*std::sin(phi) + std::sin(
psi)*std::sin(theta)*std::cos(phi),
553 std::cos(
psi)*std::cos(phi) - std::sin(
psi)*std::sin(theta)*std::sin(phi),
554 -std::sin(
psi)*std::cos(theta),
556 std::sin(
psi)*std::sin(phi) - std::cos(
psi)*std::sin(theta)*std::cos(phi),
557 std::sin(
psi)*std::cos(phi) + std::cos(
psi)*std::sin(theta)*std::sin(phi),
558 std::cos(
psi)*std::cos(theta)
577 double phi,theta,
psi = 0;
580 double sphi2 = std::sin(phi/2);
581 double cphi2 = std::cos(phi/2);
582 double stheta2 = std::sin(theta/2);
583 double ctheta2 = std::cos(theta/2);
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint angle
AxisAngle class describing rotation represented with direction axis (3D Vector) and an angle of rotat...
void SetComponents(IT begin, IT end)
Set the axis and then the angle given a pair of pointers or iterators defining the beginning and end ...
void Rectify()
Re-adjust components to eliminate small deviations from the axis being a unit vector and angles out o...
AxisVector Axis() const
access to rotation axis
Scalar Angle() const
access to rotation angle
EulerAngles class describing rotation as three angles (Euler Angles).
Scalar Psi() const
Return Psi Euler angle.
Scalar Theta() const
Return Theta Euler angle.
Scalar Phi() const
Return Phi Euler angle.
void SetComponents(IT begin, IT end)
Set the three Euler angles given a pair of pointers or iterators defining the beginning and end of an...
Rotation class with the (3D) rotation represented by a unit quaternion (u, i, j, k).
void Rectify()
Re-adjust components to eliminate small deviations from |Q| = 1 orthonormality.
Scalar U() const
Access to the four quaternion components: U() is the coefficient of the identity Pauli matrix,...
void SetComponents(IT begin, IT end)
Set the four components given an iterator to the start of the desired data, and another to the end (4...
Rotation class with the (3D) rotation represented by a 3x3 orthogonal matrix.
void GetComponents(ForeignVector &v1, ForeignVector &v2, ForeignVector &v3) const
Get components into three vectors which will be the (orthonormal) columns of the rotation matrix.
void SetComponents(const ForeignVector &v1, const ForeignVector &v2, const ForeignVector &v3)
Set components from three orthonormal vectors (which must have methods x(), y() and z()) which will b...
Rotation class representing a 3D rotation about the X axis by the angle of rotation.
Scalar SinAngle() const
Sine or Cosine of the rotation angle.
Scalar Angle() const
Angle of rotation.
Rotation class representing a 3D rotation about the Y axis by the angle of rotation.
Scalar Angle() const
Angle of rotation.
Scalar SinAngle() const
Sine or Cosine of the rotation angle.
Rotation class with the (3D) rotation represented by angles describing first a rotation of an angle p...
void GetComponents(IT begin, IT end) const
Get the axis and then the angle into data specified by an iterator begin and another to the end of th...
void SetComponents(IT begin, IT end)
Set the three Euler angles given a pair of pointers or iterators defining the beginning and end of an...
Rotation class representing a 3D rotation about the Z axis by the angle of rotation.
Scalar Angle() const
Angle of rotation.
Scalar SinAngle() const
Sine or Cosine of the rotation angle.
Namespace for new Math classes and functions.
static void correctByPi(double &psi, double &phi)
void convert(R1 const &, R2 const)
Rotation3D::Scalar Scalar
Namespace for new ROOT classes and functions.
constexpr Double_t PiOver2()