1 #ifndef __JQUATERNION3D__
2 #define __JQUATERNION3D__
21 namespace JGEOMETRY3D {}
22 namespace JPP {
using namespace JGEOMETRY3D; }
24 namespace JGEOMETRY3D {
78 const double theta = atan2(
__u,
__a) *
y;
96 return in >> quaternion.
__a >> quaternion.
__u;
109 const JFormat format(out, getFormat<JQuaternion3D>(
JFormat_t(9, 6, std::ios::fixed | std::ios::showpos)));
111 return out << format << quaternion.
__a <<
' '
112 << format << quaternion.
__u;
125 return in >> quaternion.
__a >> quaternion.
__u;
138 return out << quaternion.
__a << quaternion.
__u;
304 public JMath <JQuaternion3D>,
305 public JMath <JQuaternion3D, JQuaternion3X>,
306 public JMath <JQuaternion3D, JQuaternion3Y>,
307 public JMath <JQuaternion3D, JQuaternion3Z>,
364 const double ct = cos(0.5*theta);
365 const double st =
sin(0.5*theta);
533 return atan2(sqrt(this->
getB()*this->
getB() +
794 return *
this =
JQuaternion3D().setIdentity().mul(qz).mul(qy).mul(qx);
805 void rotate(
double& __x,
double& __y,
double& __z)
const
807 const double qx = 2.0 * (
__c*__z -
__d*__y);
808 const double qy = 2.0 * (
__d*__x -
__b*__z);
809 const double qz = 2.0 * (
__b*__y -
__c*__x);
826 const double qx = 2.0 * (
__d*__y -
__c*__z);
827 const double qy = 2.0 * (
__b*__z -
__d*__x);
828 const double qz = 2.0 * (
__c*__x -
__b*__y);
844 const double precision = std::numeric_limits<double>::min())
const
846 return (fabs(
getA() - quaternion.
getA()) <= precision &&
847 fabs(
getB() - quaternion.
getB()) <= precision &&
848 fabs(
getC() - quaternion.
getC()) <= precision &&
849 fabs(
getD() - quaternion.
getD()) <= precision);
859 bool isIdentity(
const double precision = std::numeric_limits<double>::min())
const
861 if (fabs(
getA()) <= precision) {
863 if (fabs(
getB()) <= precision)
864 return ((fabs(
getC()) <= precision && fabs(fabs(
getD()) - 1.0) <= precision) ||
865 (fabs(fabs(
getC()) - 1.0) <= precision && fabs(
getD()) <= precision));
867 return (fabs(fabs(
getB()) - 1.0) <= precision &&
868 fabs(
getC()) <= precision &&
869 fabs(
getD()) <= precision);
873 return (fabs(fabs(
getA()) - 1.0) <= precision &&
874 fabs(
getB()) <= precision &&
875 fabs(
getC()) <= precision &&
876 fabs(
getD()) <= precision);
911 return JQuaternion3D(quaternion).sub(*this).getLengthSquared();
987 const double theta = atan2(v,
getA());
1007 const double MAXIMAL_DOT_PRODUCT = 0.9995;
1015 double dot = v0.
getDot(v1);
1023 double s0 = 1.0 - alpha;
1025 if (dot <= MAXIMAL_DOT_PRODUCT) {
1027 const double theta_0 = acos(dot);
1028 const double theta_1 = theta_0 * alpha;
1030 s1 =
sin(theta_1) /
sin(theta_0);
1031 s0 = cos(theta_1) - dot * s1;
1034 *
this = (s0 * v0) + (s1 * v1);
1049 in >> quaternion.
__a;
1050 in >> quaternion.
__b;
1051 in >> quaternion.
__c;
1052 in >> quaternion.
__d;
1069 const JFormat format(out, getFormat<JQuaternion3D>(
JFormat_t(9, 6, std::ios::fixed | std::ios::showpos)));
1071 out << format << quaternion.
getA() <<
' '
1072 << format << quaternion.
getB() <<
' '
1073 << format << quaternion.
getC() <<
' '
1074 << format << quaternion.
getD();
1089 in >> quaternion.
__a;
1090 in >> quaternion.
__b;
1091 in >> quaternion.
__c;
1092 in >> quaternion.
__d;
1107 out << quaternion.
__a;
1108 out << quaternion.
__b;
1109 out << quaternion.
__c;
1110 out << quaternion.
__d;
1168 double dot = (first.
getA() * second.
getA() +
1173 dot = 2.0 * dot * dot - 1.0;
1177 else if (dot < -1.0)
1180 return 0.5 * acos(dot) * 180.0 /
JMATH::PI;
double getDot(const JQuaternion3D &quaternion) const
Get dot product.
double getAngle(const JQuaternion3D &first, const JQuaternion3D &second)
Get space angle between quanternions.
JQuaternion3D & pow(const double y)
Raise quaternion to given power.
Interface for binary output.
Q(UTCMax_s-UTCMin_s)-livetime_s
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.
JQuaternion3D(const JQuaternion3X &qx)
Constructor.
friend std::istream & operator>>(std::istream &in, JQuaternion2D &quaternion)
Write quaternion from input.
double getB() const
Get b value.
JQuaternion3D getConjugate() const
Get conjugate of this quaternion.
decomposition(const JQuaternion3D &Q, const JVector3D &dir)
Constructor.
bool isIdentity(const double precision=std::numeric_limits< double >::min()) const
Test identity.
JQuaternion3D getQuaternion() const
Get quaternion.
double getA() const
Get a value.
double getLengthSquared() const
Get length squared.
JQuaternion3D(const JQuaternion3Y &qy)
Constructor.
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.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3Z &second)
Quaternion multiplication.
JQuaternion3Z()
Default constructor.
JQuaternion3D(const JQuaternion3Z &qz)
Constructor.
JQuaternion3D & mul(const double factor)
Scale quaternion.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3Y &second)
Quaternion multiplication.
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.
JQuaternion3D swing
rotation around perpendicular axis
JQuaternion3D(const double w, const JVector3D &dir)
Constructor.
JQuaternion3D & interpolate(const JQuaternion3D &object, const double alpha)
Interpolation between quaternions.
Data structure for vector in three dimensions.
JQuaternion3D twist
rotation around parallel axis
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.
Template definition of auxiliary base class for comparison of data structures.
JQuaternion3D & mul(const JQuaternion3D &first, const JQuaternion3X &second)
Quaternion multiplication.
static const double PI
Mathematical constants.
static const JQuaternion3D & getIdentity()
Get identity quaternion.
double getY() const
Get y position.
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 multiplication.
Data structure for unit quaternion in three dimensions.
JQuaternion2D(const double theta)
Constructor.
double getAngle() const
Get rotation angle.
$WORKDIR ev_configure_dqsimulator txt echo process $DQ_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DQ_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
JQuaternion3D & setIdentity()
Set to identity quaternion.
JQuaternion3X & pow(const double y)
Raise quaternion to given power.
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
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.
double getX() const
Get x position.
JQuaternion3Z & pow(const double y)
Raise quaternion to given power.
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.
double getDot(const JVector3D &vector) const
Get dot product.
JQuaternion3D & normalise()
Normalise quaternion.
JQuaternion3Y(const double theta)
Constructor.
JQuaternion3D(const JQuaternion3X &qx, const JQuaternion3Y &qy, const JQuaternion3Z &qz)
Constructor.
JQuaternion2D & pow(const double y)
Raise quaternion to given power.
JQuaternion3D & mul(const JQuaternion3X &qx, const JQuaternion3Y &qy, const JQuaternion3Z &qz)
Quaternion multiplication.
Data structure for normalised vector in three dimensions.
JQuaternion3D(const double a, const double b, const double c, const double d)
Constructor.
Auxiliary data structure for decomposition of quaternion in twist and swing quaternions.
JQuaternion3Y & pow(const double y)
Raise quaternion to given power.
friend std::istream & operator>>(std::istream &in, JQuaternion3D &quaternion)
Write quaternion from input.
JQuaternion3D & div(const double factor)
Scale quaternion.
JQuaternion3D & negate()
Negate quaternion.
double getZ() const
Get z position.
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.