1 #ifndef __JMATH_JSVD3D__
2 #define __JMATH_JSVD3D__
14 namespace JPP {
using namespace JMATH; }
76 const double w = q[3];
77 const double x = q[0];
78 const double y = q[1];
79 const double z = q[2];
81 const double xx =
x*
x;
82 const double yy =
y*
y;
83 const double zz = z*z;
84 const double xz =
x*z;
85 const double xy =
x*
y;
86 const double yz =
y*z;
87 const double wx =
w*
x;
88 const double wy =
w*
y;
89 const double wz =
w*z;
91 V.
a00 = 1.0 - 2.0*(yy + zz);
V.
a01 = 2.0*(xy - wz);
V.
a02 = 2.0*(xz + wy);
92 V.
a10 = 2.0*(xy + wz);
V.
a11 = 1.0 - 2.0*(xx + zz);
V.
a12 = 2.0*(yz - wx);
93 V.
a20 = 2.0*(xz - wy);
V.
a21 = 2.0*(yz + wx);
V.
a22 = 1.0 - 2.0*(xx + yy);
168 const double sp1 = -1.0 + 2.0*q1.
sh*q1.
sh;
169 const double sp2 = -1.0 + 2.0*q2.
sh*q2.
sh;
170 const double sp3 = -1.0 + 2.0*q3.
sh*q3.
sh;
194 double w = fabs(
S.
a00);
201 const double s00 = (fabs(
S.
a00) >=
w ? 1.0 /
S.
a00 : 0.0);
202 const double s11 = (fabs(
S.
a11) >=
w ? 1.0 /
S.
a11 : 0.0);
203 const double s22 = (fabs(
S.
a22) >=
w ? 1.0 /
S.
a22 : 0.0);
252 for (
int i = 0; i != 4; ++i) {
279 static const double GAMMA = sqrt(8.0) + 3.0;
280 static const double CSTAR = cos(
PI/8.0);
281 static const double SSTAR = sin(
PI/8.0);
288 if (GAMMA*sh*sh < ch*ch) {
290 const double w = 1.0 / sqrt(ch*ch+sh*sh);
301 const double scale = ch*ch + sh*sh;
302 const double a = (ch+sh)*(ch-sh) /
scale;
303 const double b = (2.0*sh*ch) /
scale;
308 double s10 =
S.
a10;
double s11 =
S.
a11;
309 double s20 =
S.
a20;
double s21 =
S.
a21;
double s22 =
S.
a22;
314 S.
a00 =
a*(
a*s00 + b*s10) + b*(
a*s10 + b*s11);
315 S.
a10 =
a*(-b*s00 +
a*s10) + b*(-b*s10 +
a*s11);
316 S.
a11 = -b*(-b*s00 +
a*s10) +
a*(-b*s10 +
a*s11);
317 S.
a20 =
a*s20 + b*s21;
318 S.
a21 = -b*s20 +
a*s21;
340 (*this)[3] -= tmp[z];
341 (*this)[
x] += tmp[
y];
342 (*this)[
y] -= tmp[
x];
367 return x*
x +
y*
y + z*z;
389 const double rho = sqrt(
a*
a + b*b);
398 const double w = 1.0 / sqrt(
ch*
ch +
sh*
sh);
404 inline double geta()
const {
return 1.0 - 2.0*
sh*
sh; }
void scale(vector< double > &v, double c)
scale vector content
JMatrix3D & transpose()
Transpose.
JMatrix3D & mul(const double factor)
Scale matrix.
Singular value decomposition.
const JMatrix3D & invert(const double precision=1.0e-12) const
Get inverted matrix.
void decompose(const JMatrix3D &A)
Decompose given matrix.
static double getLengthSquared(const double x, const double y, const double z)
Get length squared.
JSVD3D()
Default constructor.
JSVD3D(const JMatrix3D &A)
Constructor.
Auxiliary classes and methods for mathematical operations.
static const double PI
Mathematical constants.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
JGivens(const double a, const double b)
Constructor.
double ch
cosine rotation angle
double sh
sine rotation angle
double getb() const
get new b value
double geta() const
get new a value
static constexpr double EPSILON
Auxiliary class for quaternion computation.
JQuaternion(JMatrix3S &S)
Constructor.
void conjugate(const int x, const int y, const int z, JMatrix3S &S)
Get conjugate of symmetric matrix for given order.