1 #ifndef __JQUATERNION3D__
2 #define __JQUATERNION3D__
20 namespace JGEOMETRY3D {}
21 namespace JPP {
using namespace JGEOMETRY3D; }
23 namespace JGEOMETRY3D {
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);
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 getDot(const JQuaternion3D &quaternion) const
Get dot product.
Interface for binary output.
JQuaternion3X()
Default constructor.
double getB() const
Get b value.
Auxiliary base class for aritmetic operations of derived class types.
JQuaternion3D(const double theta, const JVersor3D &dir)
Constructor.
JQuaternion2D()
Default constructor.
JQuaternion3X(const double theta)
Constructor.
This class represents a rotation around the x-axis.
friend std::istream & operator>>(std::istream &in, JQuaternion2D &quaternion)
Write quaternion from input.
double getB() const
Get b value.
double getA() const
Get a value.
double getLengthSquared() const
Get length squared.
esac print_variable DETECTOR INPUT_FILE OUTPUT_FILE CDF for TYPE in
void rotate_back(double &__x, double &__y, double &__z) const
Rotate back.
JQuaternion3D & add(const JQuaternion3D &quaternion)
Add quaternion.
double getDistanceSquared(const JQuaternion3D &quaternion) const
Get squared of distance to quaternion.
JQuaternion3Z(const double theta)
Constructor.
double getC() const
Get c value.
friend std::ostream & operator<<(std::ostream &out, const JQuaternion2D &quaternion)
Write quaternion to output.
fi JEventTimesliceWriter a
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3Z &second)
Quaternion multiplicaion.
JQuaternion3Z()
Default constructor.
JQuaternion3D & mul(const double factor)
Scale quaternion.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3Y &second)
Quaternion multiplicaion.
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
const JQuaternion3D & getQuaternion() const
Get quaternion.
JQuaternion3D & sub(const JQuaternion3D &quaternion)
Subtract quaternion.
JQuaternion3Y()
Default constructor.
Data structure for vector in three dimensions.
void setQuaternion(const JQuaternion3D &quaternion)
Set quaternion.
This class represents a rotation.
double getDY() const
Get y direction.
double getDX() const
Get x direction.
This class represents a rotation around the z-axis.
then print_variable DETECTOR INPUT_FILE INTERMEDIATE_FILE check_input_file $DETECTOR $INPUT_FILE check_output_file $INTERMEDIATE_FILE $OUTPUT_FILE JMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
Template definition of auxiliary base class for comparison of data structures.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3X &second)
Quaternion multiplicaion.
Interface for binary input.
friend JReader & operator>>(JReader &in, JQuaternion2D &quaternion)
Read quaternion from input.
double getD() const
Get d value.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3D &second)
Quaternion multiplicaion.
Data structure for quaternion in three dimensions.
JQuaternion2D(const double theta)
Constructor.
JQuaternion3D & setIdentity()
Set to identity matrix.
This class represents a rotation around the y-axis.
friend std::ostream & operator<<(std::ostream &out, const JQuaternion3D &quaternion)
Write quaternion to output.
double getD() const
Get d value.
friend JReader & operator>>(JReader &in, JQuaternion3D &quaternion)
Read quaternion from input.
double getC() const
Get c value.
JQuaternion3D()
Default constructor.
bool equals(const JQuaternion3D &quaternion, const double precision=std::numeric_limits< double >::min()) const
Check equality.
Base class for data structures with artithmetic capabilities.
double getA() const
Get a value.
JQuaternion3D & normalise()
Normalise quaternion.
JQuaternion3Y(const double theta)
Constructor.
JQuaternion3D(const JQuaternion3X &qx, const JQuaternion3Y &qy, const JQuaternion3Z &qz)
Constructor.
JQuaternion3D & mul(const JQuaternion3X &qx, const JQuaternion3Y &qy, const JQuaternion3Z &qz)
Quaternion multiplicaion.
Data structure for normalised vector in three dimensions.
JQuaternion3D(const double a, const double b, const double c, const double d)
Constructor.
friend std::istream & operator>>(std::istream &in, JQuaternion3D &quaternion)
Write quaternion from input.
JQuaternion3D & div(const double factor)
Scale quaternion.
JQuaternion3D & negate()
Negate quaternion.
friend JWriter & operator<<(JWriter &out, const JQuaternion3D &quaternion)
Write quaternion to output.
double getDZ() const
Get z direction.
void rotate(double &__x, double &__y, double &__z) const
Rotate.
JQuaternion3D & getQuaternion()
Get quaternion.
double getDistance(const JQuaternion3D &quaternion) const
Get distance to quaternion.
friend JWriter & operator<<(JWriter &out, const JQuaternion2D &quaternion)
Write quaternion to output.
double getLength() const
Get length.
JQuaternion3D & conjugate()
Conjugate quaternion.