30#ifndef LSST_SPHGEOM_MATRIX3D_H_
31#define LSST_SPHGEOM_MATRIX3D_H_
53 double m10,
double m11,
double m12,
54 double m20,
double m21,
double m22)
76 bool operator==(
Matrix3d const & m)
const {
77 return _c[0] == m._c[0] &&
82 bool operator!=(
Matrix3d const & m)
const {
83 return _c[0] != m._c[0] ||
103 Vector3d sum = p._c[0] + p._c[1] + p._c[2];
104 return sum(0) + sum(1) + sum(2);
117 return Vector3d(_c[0] * v(0) + _c[1] * v(1) + _c[2] * v(2));
124 for (
int i = 0; i < 3; ++i) { r._c[i] = this->
operator*(m._c[i]); }
131 for (
int i = 0; i < 3; ++i) { r._c[i] = _c[i] + m._c[i]; }
138 for (
int i = 0; i < 3; ++i) { r._c[i] = _c[i] - m._c[i]; }
145 for (
int i = 0; i < 3; ++i) { r._c[i] = _c[i].
cwiseProduct(m._c[i]); }
152 t._c[0] =
Vector3d(_c[0].x(), _c[1].x(), _c[2].x());
153 t._c[1] =
Vector3d(_c[0].y(), _c[1].y(), _c[2].y());
154 t._c[2] =
Vector3d(_c[0].z(), _c[1].z(), _c[2].z());
163 Vector3d a0(m(1, 1) * m(2, 2) - m(2, 1) * m(1, 2),
164 m(1, 2) * m(2, 0) - m(2, 2) * m(1, 0),
165 m(1, 0) * m(2, 1) - m(2, 0) * m(1, 1));
168 double rdet = 1.0 / (a0(0) * m(0,0) + a0(1) * m(0,1) + a0(2) * m(0,2));
170 inv._c[0] = a0 * rdet;
171 inv._c[1] =
Vector3d((m(0, 2) * m(2, 1) - m(2, 2) * m(0, 1)) * rdet,
172 (m(0, 0) * m(2, 2) - m(2, 0) * m(0, 2)) * rdet,
173 (m(0, 1) * m(2, 0) - m(2, 1) * m(0, 0)) * rdet);
174 inv._c[2] =
Vector3d((m(0, 1) * m(1, 2) - m(1, 1) * m(0, 2)) * rdet,
175 (m(0, 2) * m(1, 0) - m(1, 2) * m(0, 0)) * rdet,
176 (m(0, 0) * m(1, 1) - m(1, 0) * m(0, 1)) * rdet);
184std::ostream & operator<<(std::ostream &, Matrix3d
const &);
This file declares a class for representing vectors in ℝ³.
A 3x3 matrix with real entries stored in double precision.
Definition Matrix3d.h:45
Vector3d getRow(int r) const
getRow returns the r-th matrix row. Bounds are not checked.
Definition Matrix3d.h:89
Matrix3d inverse() const
inverse returns the inverse of this matrix.
Definition Matrix3d.h:159
Matrix3d operator+(Matrix3d const &m) const
The addition operator returns the sum of this matrix and m.
Definition Matrix3d.h:129
Vector3d const & getColumn(int c) const
getColumn returns the c-th matrix column. Bounds are not checked.
Definition Matrix3d.h:94
Matrix3d(Vector3d const &v)
Definition Matrix3d.h:63
Matrix3d()
This constructor creates a zero matrix.
Definition Matrix3d.h:48
Matrix3d(double s)
This constructor returns the identity matrix scaled by s.
Definition Matrix3d.h:70
double operator()(int r, int c) const
Definition Matrix3d.h:98
double getNorm() const
getNorm returns the L2 (Frobenius) norm of this matrix.
Definition Matrix3d.h:112
double inner(Matrix3d const &m) const
inner returns the Frobenius inner product of this matrix with m.
Definition Matrix3d.h:101
Matrix3d(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22)
Definition Matrix3d.h:52
Vector3d operator*(Vector3d const &v) const
Definition Matrix3d.h:116
Matrix3d transpose() const
transpose returns the transpose of this matrix.
Definition Matrix3d.h:150
Matrix3d cwiseProduct(Matrix3d const &m) const
cwiseProduct returns the component-wise product of this matrix and m.
Definition Matrix3d.h:143
Matrix3d operator-(Matrix3d const &m) const
The subtraction operator returns the difference between this matrix and m.
Definition Matrix3d.h:136
double getSquaredNorm() const
Definition Matrix3d.h:109
Matrix3d operator*(Matrix3d const &m) const
Definition Matrix3d.h:122
Vector3d is a vector in ℝ³ with components stored in double precision.
Definition Vector3d.h:51
Vector3d cwiseProduct(Vector3d const &v) const
cwiseProduct returns the component-wise product of this vector and v.
Definition Vector3d.h:157