21namespace JPP {
using namespace JMATH; }
34 public JMath <JMatrix4D>,
73 JMatrix4D(
const double __a00,
const double __a01,
const double __a02,
const double __a03,
74 const double __a10,
const double __a11,
const double __a12,
const double __a13,
75 const double __a20,
const double __a21,
const double __a22,
const double __a23,
76 const double __a30,
const double __a31,
const double __a32,
const double __a33) :
228 a00 *= factor;
a01 *= factor;
a02 *= factor;
a03 *= factor;
229 a10 *= factor;
a11 *= factor;
a12 *= factor;
a13 *= factor;
230 a20 *= factor;
a21 *= factor;
a22 *= factor;
a23 *= factor;
231 a30 *= factor;
a31 *= factor;
a32 *= factor;
a33 *= factor;
245 a00 /= factor;
a01 /= factor;
a02 /= factor;
a03 /= factor;
246 a10 /= factor;
a11 /= factor;
a12 /= factor;
a13 /= factor;
247 a20 /= factor;
a21 /= factor;
a22 /= factor;
a23 /= factor;
248 a30 /= factor;
a31 /= factor;
a32 /= factor;
a33 /= factor;
264 a00 = A.
a00 * B.a00 + A.a01 * B.a10 + A.a02 * B.a20 + A.a03 * B.a30;
265 a01 = A.a00 * B.a01 + A.a01 * B.a11 + A.a02 * B.a21 + A.a03 * B.a31;
266 a02 = A.a00 * B.a02 + A.a01 * B.a12 + A.a02 * B.a22 + A.a03 * B.a32;
267 a03 = A.a00 * B.a03 + A.a01 * B.a13 + A.a02 * B.a23 + A.a03 * B.a33;
269 a10 = A.a10 * B.a00 + A.a11 * B.a10 + A.a12 * B.a20 + A.a13 * B.a30;
270 a11 = A.a10 * B.a01 + A.a11 * B.a11 + A.a12 * B.a21 + A.a13 * B.a31;
271 a12 = A.a10 * B.a02 + A.a11 * B.a12 + A.a12 * B.a22 + A.a13 * B.a32;
272 a13 = A.a10 * B.a03 + A.a11 * B.a13 + A.a12 * B.a23 + A.a13 * B.a33;
274 a20 = A.a20 * B.a00 + A.a21 * B.a10 + A.a22 * B.a20 + A.a23 * B.a30;
275 a21 = A.a20 * B.a01 + A.a21 * B.a11 + A.a22 * B.a21 + A.a23 * B.a31;
276 a22 = A.a20 * B.a02 + A.a21 * B.a12 + A.a22 * B.a22 + A.a23 * B.a32;
277 a23 = A.a20 * B.a03 + A.a21 * B.a13 + A.a22 * B.a23 + A.a23 * B.a33;
279 a30 = A.a30 * B.a00 + A.a31 * B.a10 + A.a32 * B.a20 + A.a33 * B.a30;
280 a31 = A.a30 * B.a01 + A.a31 * B.a11 + A.a32 * B.a21 + A.a33 * B.a31;
281 a32 = A.a30 * B.a02 + A.a31 * B.a12 + A.a32 * B.a22 + A.a33 * B.a32;
282 a33 = A.a30 * B.a03 + A.a31 * B.a13 + A.a32 * B.a23 + A.a33 * B.a33;
296 const double eps = std::numeric_limits<double>::min())
const
298 return (fabs(
a00 - A.a00) <= eps &&
299 fabs(
a01 - A.a01) <= eps &&
300 fabs(
a02 - A.a02) <= eps &&
301 fabs(
a03 - A.a03) <= eps &&
302 fabs(
a10 - A.a10) <= eps &&
303 fabs(
a11 - A.a11) <= eps &&
304 fabs(
a12 - A.a12) <= eps &&
305 fabs(
a13 - A.a13) <= eps &&
306 fabs(
a20 - A.a20) <= eps &&
307 fabs(
a21 - A.a21) <= eps &&
308 fabs(
a22 - A.a22) <= eps &&
309 fabs(
a23 - A.a23) <= eps &&
310 fabs(
a30 - A.a30) <= eps &&
311 fabs(
a31 - A.a31) <= eps &&
312 fabs(
a32 - A.a32) <= eps &&
313 fabs(
a33 - A.a33) <= eps);
323 bool isIdentity(
const double eps = std::numeric_limits<double>::min())
const
366 void transform(
double& __x0,
double& __x1,
double& __x2,
double& __x3)
const
368 const double x0 =
a00 * __x0 +
a01 * __x1 +
a02 * __x2 +
a03 * __x3;
369 const double x1 =
a10 * __x0 +
a11 * __x1 +
a12 * __x2 +
a13 * __x3;
370 const double x2 =
a20 * __x0 +
a21 * __x1 +
a22 * __x2 +
a23 * __x3;
371 const double x3 =
a30 * __x0 +
a31 * __x1 +
a32 * __x2 +
a33 * __x3;
389 in >> matrix.
a00; in >> matrix.
a01; in >> matrix.
a02; in >> matrix.
a03;
390 in >> matrix.
a10; in >> matrix.
a11; in >> matrix.
a12; in >> matrix.
a13;
391 in >> matrix.
a20; in >> matrix.
a21; in >> matrix.
a22; in >> matrix.
a23;
392 in >> matrix.
a30; in >> matrix.
a31; in >> matrix.
a32; in >> matrix.
a33;
407 out << matrix.
a00; out << matrix.
a01; out << matrix.
a02; out << matrix.
a03;
408 out << matrix.
a10; out << matrix.
a11; out << matrix.
a12; out << matrix.
a13;
409 out << matrix.
a20; out << matrix.
a21; out << matrix.
a22; out << matrix.
a23;
410 out << matrix.
a30; out << matrix.
a31; out << matrix.
a32; out << matrix.
a33;
429 out << format << A.a00 <<
' ' << format << A.a01 <<
' ' << format << A.a02 <<
' ' << format << A.a03 << endl;
430 out << format << A.a10 <<
' ' << format << A.a11 <<
' ' << format << A.a12 <<
' ' << format << A.a13 << endl;
431 out << format << A.a20 <<
' ' << format << A.a21 <<
' ' << format << A.a22 <<
' ' << format << A.a23 << endl;
432 out << format << A.a30 <<
' ' << format << A.a31 <<
' ' << format << A.a32 <<
' ' << format << A.a33 << endl;
JFormat_t & getFormat()
Get format for given type.
Base class for data structures with artithmetic capabilities.
Interface for binary input.
Interface for binary output.
double getDeterminant() const
Get determinant of matrix.
JMatrix4D & setIdentity()
Set to identity matrix.
void transform(double &__x0, double &__x1, double &__x2, double &__x3) const
Transform.
const JMatrix4D & mul(const JMatrix4D &A, const JMatrix4D &B)
Matrix multiplication.
static const JMatrix4D & getIdentity()
Get reference to unique instance of this class object.
bool isIdentity(const double eps=std::numeric_limits< double >::min()) const
Test identity.
JMatrix4D(const double __a00, const double __a01, const double __a02, const double __a03, const double __a10, const double __a11, const double __a12, const double __a13, const double __a20, const double __a21, const double __a22, const double __a23, const double __a30, const double __a31, const double __a32, const double __a33)
Contructor.
JMatrix4D & add(const JMatrix4D &A)
Matrix addition.
JMatrix4D & sub(const JMatrix4D &A)
Matrix subtraction.
JMatrix4D()
Default constructor.
JMatrix4D & reset()
Set matrix to the null matrix.
double getDeterminant() const
Get determinant of matrix.
friend JReader & operator>>(JReader &in, JMatrix4D &matrix)
Read matrix from input.
JMatrix4D & transpose()
Transpose.
static const JMatrix4D & getInstance()
Get reference to unique instance of this class object.
JMatrix4D & negate()
Negate matrix.
JMatrix4D & div(const double factor)
Scale matrix.
void set(const JMatrix4D &A)
Set matrix.
bool equals(const JMatrix4D &A, const double eps=std::numeric_limits< double >::min()) const
Equality.
friend std::ostream & operator<<(std::ostream &out, const JMatrix4D &A)
Print ASCII formatted output.
friend JWriter & operator<<(JWriter &out, const JMatrix4D &matrix)
Write matrix to output.
JMatrix4D & mul(const double factor)
Scale matrix.
Auxiliary classes and methods for mathematical operations.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Template definition of auxiliary base class for comparison of data structures.
Auxiliary base class for aritmetic operations of derived class types.