Go to the documentation of this file. 1 #ifndef __JQUATERNION3D__
2 #define __JQUATERNION3D__
78 return in >> quaternion.
__a >> quaternion.
__u;
91 return out << quaternion.
__a <<
' ' << quaternion.
__u;
104 return in >> quaternion.
__a >> quaternion.
__u;
117 return out << quaternion.
__a << quaternion.
__u;
241 public JMath <JQuaternion3D>,
242 public JMath <JQuaternion3D, JQuaternion3X>,
243 public JMath <JQuaternion3D, JQuaternion3Y>,
244 public JMath <JQuaternion3D, JQuaternion3Z>,
296 const double ct = cos(0.5*theta);
297 const double st = sin(0.5*theta);
332 return static_cast<const JQuaternion3D&>(*
this);
343 return static_cast<JQuaternion3D&>(*
this);
354 static_cast<JQuaternion3D&>(*
this) = quaternion;
634 return *
this =
JQuaternion3D().setIdentity().mul(qz).mul(qy).mul(qx);
645 void rotate(
double& __x,
double& __y,
double& __z)
const
647 const double qx = 2.0 * (
__c*__z -
__d*__y);
648 const double qy = 2.0 * (
__d*__x -
__b*__z);
649 const double qz = 2.0 * (
__b*__y -
__c*__x);
651 const double x = __x +
__c*qz -
__d*qy +
__a*qx;
652 const double y = __y -
__b*qz +
__a*qy +
__d*qx;
653 const double z = __z +
__a*qz +
__b*qy -
__c*qx;
670 const double qx = 2.0 * (
__d*__y -
__c*__z);
671 const double qy = 2.0 * (
__b*__z -
__d*__x);
672 const double qz = 2.0 * (
__c*__x -
__b*__y);
674 const double x = __x -
__c*qz +
__d*qy +
__a*qx;
675 const double y = __y +
__b*qz +
__a*qy -
__d*qx;
676 const double z = __z +
__a*qz -
__b*qy +
__c*qx;
692 const double precision = std::numeric_limits<double>::min())
const
694 return (fabs(
getA() - quaternion.
getA()) <= precision &&
695 fabs(
getB() - quaternion.
getB()) <= precision &&
696 fabs(
getC() - quaternion.
getC()) <= precision &&
697 fabs(
getD() - quaternion.
getD()) <= precision);
731 return JQuaternion3D(quaternion).sub(*this).getLengthSquared();
772 in >> quaternion.
__a;
773 in >> quaternion.
__b;
774 in >> quaternion.
__c;
775 in >> quaternion.
__d;
790 out << quaternion.
getA() <<
' '
791 << quaternion.
getB() <<
' '
792 << quaternion.
getC() <<
' '
793 << quaternion.
getD();
808 in >> quaternion.
__a;
809 in >> quaternion.
__b;
810 in >> quaternion.
__c;
811 in >> quaternion.
__d;
826 out << quaternion.
getA();
827 out << quaternion.
getB();
828 out << quaternion.
getC();
829 out << quaternion.
getD();
double getDZ() const
Get z direction.
bool equals(const JQuaternion3D &quaternion, const double precision=std::numeric_limits< double >::min()) const
Check equality.
JQuaternion3Y(const double theta)
Constructor.
Interface for binary input.
double getLengthSquared() const
Get length squared.
JQuaternion3D(const JQuaternion3X &qx, const JQuaternion3Y &qy, const JQuaternion3Z &qz)
Constructor.
friend JWriter & operator<<(JWriter &out, const JQuaternion3D &quaternion)
Write quaternion to output.
JQuaternion3X()
Default constructor.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3Y &second)
Quaternion multiplicaion.
JQuaternion3D & mul(const JQuaternion3X &qx, const JQuaternion3Y &qy, const JQuaternion3Z &qz)
Quaternion multiplicaion.
double getDistanceSquared(const JQuaternion3D &quaternion) const
Get squared of distance to quaternion.
JQuaternion3D(const double a, const double b, const double c, const double d)
Constructor.
JQuaternion2D()
Default constructor.
This class represents a rotation around the y-axis.
double getD() const
Get d value.
void rotate_back(double &__x, double &__y, double &__z) const
Rotate back.
Template definition of auxiliary base class for comparison of data structures.
JQuaternion3D & getQuaternion()
Get quaternion.
JQuaternion3X(const double theta)
Constructor.
JQuaternion3D(const double theta, const JVersor3D &dir)
Constructor.
friend std::istream & operator>>(std::istream &in, JQuaternion2D &quaternion)
Write quaternion from input.
Data structure for normalised vector in three dimensions.
friend std::ostream & operator<<(std::ostream &out, const JQuaternion2D &quaternion)
Write quaternion to output.
Auxiliary base class for aritmetic operations of derived class types.
double getA() const
Get a value.
JQuaternion3Y()
Default constructor.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3Z &second)
Quaternion multiplicaion.
JQuaternion3D & div(const double factor)
Scale quaternion.
JQuaternion3Z()
Default constructor.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3X &second)
Quaternion multiplicaion.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
JQuaternion3Z(const double theta)
Constructor.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3D &second)
Quaternion multiplicaion.
Data structure for vector in three dimensions.
JQuaternion3D()
Default constructor.
const JQuaternion3D & getQuaternion() const
Get quaternion.
Interface for binary output.
This class represents a rotation around the x-axis.
double getDX() const
Get x direction.
friend JReader & operator>>(JReader &in, JQuaternion2D &quaternion)
Read quaternion from input.
Data structure for quaternion in three dimensions.
double getLength() const
Get length.
double getDY() const
Get y direction.
double getB() const
Get b value.
friend std::ostream & operator<<(std::ostream &out, const JQuaternion3D &quaternion)
Write quaternion to output.
JQuaternion3D & sub(const JQuaternion3D &quaternion)
Subtract quaternion.
double getD() const
Get d value.
double getDistance(const JQuaternion3D &quaternion) const
Get distance to quaternion.
JQuaternion3D & conjugate()
Conjugate quaternion.
JQuaternion3D & setIdentity()
Set to identity matrix.
JQuaternion3D & negate()
Negate quaternion.
friend std::istream & operator>>(std::istream &in, JQuaternion3D &quaternion)
Write quaternion from input.
double getC() const
Get c value.
Auxiliary classes and methods for 3D geometrical objects and operations.
JQuaternion2D(const double theta)
Constructor.
friend JReader & operator>>(JReader &in, JQuaternion3D &quaternion)
Read quaternion from input.
double getB() const
Get b value.
double getC() const
Get c value.
double getDot(const JQuaternion3D &quaternion) const
Get dot product.
JQuaternion3D & add(const JQuaternion3D &quaternion)
Add quaternion.
This class represents a rotation.
friend JWriter & operator<<(JWriter &out, const JQuaternion2D &quaternion)
Write quaternion to output.
void setQuaternion(const JQuaternion3D &quaternion)
Set quaternion.
This class represents a rotation around the z-axis.
double getA() const
Get a value.
void rotate(double &__x, double &__y, double &__z) const
Rotate.
JQuaternion3D & mul(const double factor)
Scale quaternion.