lsst::geom::LinearTransform Class Referencefinal

A 2D linear coordinate transformation. More...

#include <LinearTransform.h>

## Public Types

enum  Parameters { XX = 0 , YX = 1 , XY = 2 , YY = 3 }

typedef Eigen::Matrix< double, 4, 1 > ParameterVector

typedef Eigen::Matrix< double, 2, 4 > TransformDerivativeMatrix

typedef Eigen::Matrix< double, 4, 4 > ProductDerivativeMatrix

typedef Eigen::Matrix< double, 2, 2, Eigen::DontAlign > Matrix

## Public Member Functions

LinearTransform () noexcept
Construct an empty (identity) LinearTransform. More...

LinearTransform (Matrix const &matrix) noexcept
Construct an LinearTransform from an Eigen::Matrix. More...

LinearTransform (LinearTransform const &other) noexcept

LinearTransform (LinearTransform &&other) noexcept

~LinearTransform () noexcept=default

LinearTransform operator* (LinearTransform const &other) const noexcept

LinearTransformoperator= (LinearTransform const &other) noexcept

LinearTransformoperator= (LinearTransform &&other) noexcept

LinearTransformoperator+= (LinearTransform const &other) noexcept

LinearTransform operator+ (LinearTransform const &other) noexcept

LinearTransformoperator-= (LinearTransform const &other) noexcept

LinearTransform operator- (LinearTransform const &other) noexcept

ParameterVector const getParameterVector () const noexcept
Return the transform matrix elements as a parameter vector. More...

void setParameterVector (ParameterVector const &vector) noexcept
Set the transform matrix elements from a parameter vector. More...

Matrix const & getMatrix () const noexcept

MatrixgetMatrix () noexcept

double & operator[] (int i)

double const & operator[] (int i) const

LinearTransform const inverted () const
Return the inverse transform. More...

double computeDeterminant () const noexcept
Return the determinant of the 2x2 matrix. More...

bool isIdentity () const noexcept
Whether the transform is a no-op. More...

Point2D operator() (Point2D const &p) const noexcept
Transform a Point2D object. More...

Extent2D operator() (Extent2D const &p) const noexcept
Transform a Extent2D object. More...

double applyX (double x, double y) const noexcept
Transform a point given and returned as separate double values. More...

double applyY (double x, double y) const noexcept

TransformDerivativeMatrix dTransform (Point2D const &input) const noexcept
Derivative of (*this)(input) with respect to the transform elements (for Point). More...

TransformDerivativeMatrix dTransform (Extent2D const &input) const noexcept
Derivative of (*this)(input) with respect to the transform elements (for Extent);. More...

## Static Public Member Functions

static LinearTransform makeScaling (double s) noexcept

static LinearTransform makeScaling (double s, double t) noexcept

static LinearTransform makeRotation (Angle t) noexcept

## Detailed Description

A 2D linear coordinate transformation.

The transform is represented by a matrix $$\mathbf{M}$$ such that

$\left[\begin{array}{ c } x_f \\ y_f \end{array}\right] = \mathbf{M} \left[\begin{array}{ c } x_i \\ y_i \end{array}\right]$

where $$(x_i,y_i)$$ are the input coordinates and $$(x_f,y_f)$$ are the output coordinates.

If $$x_f(x_i,y_i)$$ and $$y_f(x_i,y_i)$$ are continuous differentiable functions, then

$\mathbf{M} = \left[\begin{array}{ c c } \displaystyle\frac{\partial x_f}{\partial x_i} & \displaystyle\frac{\partial x_f}{\partial y_i} \\ \displaystyle\frac{\partial y_f}{\partial x_i} & \displaystyle\frac{\partial y_f}{\partial y_i} \end{array}\right]$

evaluated at $$(x_i,y_i)$$.

Definition at line 69 of file LinearTransform.h.

## ◆ Matrix

 typedef Eigen::Matrix lsst::geom::LinearTransform::Matrix

Definition at line 77 of file LinearTransform.h.

## ◆ ParameterVector

 typedef Eigen::Matrix lsst::geom::LinearTransform::ParameterVector

Definition at line 73 of file LinearTransform.h.

## ◆ ProductDerivativeMatrix

 typedef Eigen::Matrix lsst::geom::LinearTransform::ProductDerivativeMatrix

Definition at line 75 of file LinearTransform.h.

## ◆ TransformDerivativeMatrix

 typedef Eigen::Matrix lsst::geom::LinearTransform::TransformDerivativeMatrix

Definition at line 74 of file LinearTransform.h.

## ◆ Parameters

Enumerator
XX
YX
XY
YY

Definition at line 71 of file LinearTransform.h.

## ◆ LinearTransform() [1/4]

 lsst::geom::LinearTransform::LinearTransform ( )
inlinenoexcept

Construct an empty (identity) LinearTransform.

Definition at line 80 of file LinearTransform.h.

80 : _matrix(Matrix::Identity()) {}

## ◆ LinearTransform() [2/4]

 lsst::geom::LinearTransform::LinearTransform ( Matrix const & matrix )
inlineexplicitnoexcept

Construct an LinearTransform from an Eigen::Matrix.

Definition at line 83 of file LinearTransform.h.

83 : _matrix(matrix) {}

## ◆ LinearTransform() [3/4]

 lsst::geom::LinearTransform::LinearTransform ( LinearTransform const & other )
inlinenoexcept

Definition at line 86 of file LinearTransform.h.

86 : _matrix(other._matrix){};

## ◆ LinearTransform() [4/4]

 lsst::geom::LinearTransform::LinearTransform ( LinearTransform && other )
inlinenoexcept

Definition at line 87 of file LinearTransform.h.

87 : _matrix(std::move(other._matrix)){};
T move(T... args)

## ◆ ~LinearTransform()

 lsst::geom::LinearTransform::~LinearTransform ( )
defaultnoexcept

## ◆ applyX()

 double lsst::geom::LinearTransform::applyX ( double x, double y ) const
inlinenoexcept

Transform a point given and returned as separate double values.

This interface is intended primarily for use in Python (where it is vectorized to support NumPy array arguments).

Definition at line 195 of file LinearTransform.h.

195 { return _matrix(0, 0)*x + _matrix(0, 1)*y; }
double x
int y
Definition: SpanSet.cc:48

## ◆ applyY()

 double lsst::geom::LinearTransform::applyY ( double x, double y ) const
inlinenoexcept

Definition at line 196 of file LinearTransform.h.

196 { return _matrix(1, 0)*x + _matrix(1, 1)*y; }

## ◆ computeDeterminant()

 double lsst::geom::LinearTransform::computeDeterminant ( ) const
noexcept

Return the determinant of the 2x2 matrix.

Definition at line 54 of file LinearTransform.cc.

54 { return getMatrix().determinant(); }
Matrix const & getMatrix() const noexcept

## ◆ dTransform() [1/2]

 TransformDerivativeMatrix lsst::geom::LinearTransform::dTransform ( Extent2D const & input ) const
inlinenoexcept

Derivative of (*this)(input) with respect to the transform elements (for Extent);.

Definition at line 205 of file LinearTransform.h.

205  {
206  return dTransform(Point2D(input));
207  }
TransformDerivativeMatrix dTransform(Point2D const &input) const noexcept
Derivative of (*this)(input) with respect to the transform elements (for Point).
Point< double, 2 > Point2D
Definition: Point.h:324

## ◆ dTransform() [2/2]

 LinearTransform::TransformDerivativeMatrix lsst::geom::LinearTransform::dTransform ( Point2D const & input ) const
noexcept

Derivative of (*this)(input) with respect to the transform elements (for Point).

Definition at line 56 of file LinearTransform.cc.

56  {
57  TransformDerivativeMatrix r = TransformDerivativeMatrix::Zero();
58  r(0, XX) = input.getX();
59  r(0, XY) = input.getY();
60  r(1, YX) = input.getX();
61  r(1, YY) = input.getY();
62  return r;
63 }
Eigen::Matrix< double, 2, 4 > TransformDerivativeMatrix

## ◆ getMatrix() [1/2]

 Matrix const& lsst::geom::LinearTransform::getMatrix ( ) const
inlinenoexcept

Definition at line 151 of file LinearTransform.h.

151 { return _matrix; }

## ◆ getMatrix() [2/2]

 Matrix& lsst::geom::LinearTransform::getMatrix ( )
inlinenoexcept

Definition at line 152 of file LinearTransform.h.

152 { return _matrix; }

## ◆ getParameterVector()

 LinearTransform::ParameterVector const lsst::geom::LinearTransform::getParameterVector ( ) const
noexcept

Return the transform matrix elements as a parameter vector.

The elements will be ordered XX, YX, XY, YY

Definition at line 32 of file LinearTransform.cc.

32  {
34  r << (*this)[XX], (*this)[YX], (*this)[XY], (*this)[YY];
35  return r;
36 }
Eigen::Matrix< double, 4, 1 > ParameterVector

## ◆ inverted()

 LinearTransform const lsst::geom::LinearTransform::inverted ( ) const

Return the inverse transform.

Exceptions
 lsst::geom::SingularTransformException if not invertible

Definition at line 45 of file LinearTransform.cc.

45  {
46  Eigen::FullPivLU<Matrix> lu(getMatrix());
47  if (!lu.isInvertible()) {
48  throw LSST_EXCEPT(SingularTransformException, "Could not compute LinearTransform inverse");
49  }
50  Matrix inv = lu.inverse();
51  return LinearTransform(inv);
52 }
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
Eigen::Matrix< double, 2, 2, Eigen::DontAlign > Matrix
LinearTransform() noexcept
Construct an empty (identity) LinearTransform.

## ◆ isIdentity()

 bool lsst::geom::LinearTransform::isIdentity ( ) const
inlinenoexcept

Whether the transform is a no-op.

Definition at line 170 of file LinearTransform.h.

170 { return getMatrix().isIdentity(); }

## ◆ makeRotation()

 static LinearTransform lsst::geom::LinearTransform::makeRotation ( Angle t )
inlinestaticnoexcept

Definition at line 102 of file LinearTransform.h.

102  {
104  }

## ◆ makeScaling() [1/2]

 static LinearTransform lsst::geom::LinearTransform::makeScaling ( double s )
inlinestaticnoexcept

Definition at line 94 of file LinearTransform.h.

94  {
95  return LinearTransform((Matrix() << s, 0.0, 0.0, s).finished());
96  }

## ◆ makeScaling() [2/2]

 static LinearTransform lsst::geom::LinearTransform::makeScaling ( double s, double t )
inlinestaticnoexcept

Definition at line 98 of file LinearTransform.h.

98  {
99  return LinearTransform((Matrix() << s, 0.0, 0.0, t).finished());
100  }

## ◆ operator()() [1/2]

 Extent2D lsst::geom::LinearTransform::operator() ( Extent2D const & p ) const
inlinenoexcept

Transform a Extent2D object.

This operation is equivalent to applying the LinearTransform to an lsst::geom::Point

Definition at line 186 of file LinearTransform.h.

186 { return Extent2D(getMatrix() * p.asEigen()); }
Extent< double, 2 > Extent2D
Definition: Extent.h:400

## ◆ operator()() [2/2]

 Point2D lsst::geom::LinearTransform::operator() ( Point2D const & p ) const
inlinenoexcept

Transform a Point2D object.

This operation is equivalent to applying the LinearTransform to an lsst::geom::Extent

Definition at line 178 of file LinearTransform.h.

178 { return Point2D(getMatrix() * p.asEigen()); }

## ◆ operator*()

 LinearTransform lsst::geom::LinearTransform::operator* ( LinearTransform const & other ) const
inlinenoexcept

Definition at line 90 of file LinearTransform.h.

90  {
91  return LinearTransform(getMatrix() * other.getMatrix());
92  }

## ◆ operator+()

 LinearTransform lsst::geom::LinearTransform::operator+ ( LinearTransform const & other )
inlinenoexcept

Definition at line 121 of file LinearTransform.h.

121  {
122  LinearTransform tmp(*this);
123  tmp += other;
124  return tmp;
125  }

## ◆ operator+=()

 LinearTransform& lsst::geom::LinearTransform::operator+= ( LinearTransform const & other )
inlinenoexcept

Definition at line 116 of file LinearTransform.h.

116  {
117  _matrix += other._matrix;
118  return *this;
119  }

## ◆ operator-()

 LinearTransform lsst::geom::LinearTransform::operator- ( LinearTransform const & other )
inlinenoexcept

Definition at line 132 of file LinearTransform.h.

132  {
133  LinearTransform tmp(*this);
134  tmp -= other;
135  return tmp;
136  }

## ◆ operator-=()

 LinearTransform& lsst::geom::LinearTransform::operator-= ( LinearTransform const & other )
inlinenoexcept

Definition at line 127 of file LinearTransform.h.

127  {
128  _matrix -= other._matrix;
129  return *this;
130  }

## ◆ operator=() [1/2]

 LinearTransform& lsst::geom::LinearTransform::operator= ( LinearTransform && other )
inlinenoexcept

Definition at line 111 of file LinearTransform.h.

111  {
112  _matrix = std::move(other._matrix);
113  return *this;
114  }

## ◆ operator=() [2/2]

 LinearTransform& lsst::geom::LinearTransform::operator= ( LinearTransform const & other )
inlinenoexcept

Definition at line 107 of file LinearTransform.h.

107  {
108  _matrix = other._matrix;
109  return *this;
110  }

## ◆ operator[]() [1/2]

 double& lsst::geom::LinearTransform::operator[] ( int i )
inline

Definition at line 154 of file LinearTransform.h.

154 { return _matrix(i % 2, i / 2); }

## ◆ operator[]() [2/2]

 double const& lsst::geom::LinearTransform::operator[] ( int i ) const
inline

Definition at line 155 of file LinearTransform.h.

155 { return const_cast<Matrix&>(_matrix)(i % 2, i / 2); }

## ◆ setParameterVector()

 void lsst::geom::LinearTransform::setParameterVector ( LinearTransform::ParameterVector const & vector )
noexcept

Set the transform matrix elements from a parameter vector.

The parameter vector is ordered XX, YX, XY, YY

Definition at line 38 of file LinearTransform.cc.

38  {
39  (*this)[XX] = vector[XX];
40  (*this)[XY] = vector[XY];
41  (*this)[YX] = vector[YX];
42  (*this)[YY] = vector[YY];
43 }

The documentation for this class was generated from the following files:
• /j/snowflake/release/lsstsw/stack/lsst-scipipe-0.7.0/Linux64/geom/22.0.1-6-g8d3140d+720564cf76/include/lsst/geom/LinearTransform.h
• /j/snowflake/release/lsstsw/stack/lsst-scipipe-0.7.0/Linux64/geom/22.0.1-6-g8d3140d+720564cf76/src/LinearTransform.cc