192 y = atan2 (sy,
dMij(N,i,i));
227 y = atan2 (-
dMij(N,i,k),cy);
269 double ci = cos(
XX(angles));
270 double cj = cos(
YY(angles));
271 double ch = cos(
ZZ(angles));
272 double si = sin(
XX(angles));
273 double sj = sin(
YY(angles));
274 double sh = sin(
ZZ(angles));
290 dMij(M,j,j) = -cj*ss+cc;
291 dMij(M,k,j) = -cj*cs-sc;
293 dMij(M,i,k) = -sj*ch;
295 dMij(M,k,k) = cj*cc-ss;
301 dMij(M,k,i) = sj*cc+ss;
304 dMij(M,j,j) = sj*ss+cc;
305 dMij(M,k,j) = sj*cs-sc;
317 return (order & ~
Legal) ? false :
true;
378 char a[3] = {
'X',
'Y',
'Z' };
393 << a[
i] << a[
j] << a[
k] << r <<
")";
398 angle = fmod(angle, (2. * M_PI));
426 Euler e (0,0,0, order);
432 XX(otherXyzRot) = M_PI+
XX(xyzRot);
433 YY(otherXyzRot) = M_PI-
YY(xyzRot);
434 ZZ(otherXyzRot) = M_PI+
ZZ(xyzRot);
445 xyzRot = otherXyzRot;
454 auto targetSameOrder =
Euler(target,
order());
456 targetSameOrder.toXYZVector(targetXyz);
483 cos_rz = cos (
ZZ(r));
484 cos_ry = cos (
YY(r));
485 cos_rx = cos (
XX(r));
486 sin_rz = sin (
ZZ(r));
487 sin_ry = sin (
YY(r));
488 sin_rx = sin (
XX(r));
490 m00 = cos_rz * cos_ry;
491 m01 = sin_rz * cos_ry;
493 m10 = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx;
494 m11 = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx;
495 m12 = cos_ry * sin_rx;
496 m20 = -sin_rz * -sin_rx + cos_rz * sin_ry * cos_rx;
497 m21 = cos_rz * -sin_rx + sin_rz * sin_ry * cos_rx;
498 m22 = cos_ry * cos_rx;
void extract(const Matrix2D< double > &)
void sqrt(Image< double > &op)
Matrix1D< double > vectorR3(double x, double y, double z)
void toMatrix(Matrix2D< double > &M) const
void angleOrder(int &i, int &j, int &k) const
static double angleMod(double angle)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
double dotProduct(const Matrix1D< T > &op1) const
void angleMapping(int &i, int &j, int &k) const
const Euler & operator=(const Euler &)
void setXYZVector(const Matrix1D< double > &)
static void nearestRotation(Matrix1D< double > &xyzRot, const Matrix1D< double > &targetXyzRot, eulerOrder order=XYZ)
bool initialRepeated() const
static bool legal(eulerOrder)
void eulerRotate(Matrix2D< double > &M, const Matrix1D< double > &r)
void makeNear(const Euler &target)
void set(Axis initial, bool relative, bool parityEven, bool firstRepeats)
static void simpleXYZRotation(Matrix1D< double > &xyzRot, const Matrix1D< double > &targetXyzRot)
void toXYZVector(Matrix1D< double > &v) const
void setOrder(eulerOrder)
std::ostream & operator<<(std::ostream &o, const Euler &euler)