lsst.geom
g19811a7679+d02280c829
Toggle main menu visibility
Loading...
Searching...
No Matches
src
LinearTransform.cc
Go to the documentation of this file.
1
/*
2
* Developed for the LSST Data Management System.
3
* This product includes software developed by the LSST Project
4
* (https://www.lsst.org).
5
* See the COPYRIGHT file at the top-level directory of this distribution
6
* for details of code ownership.
7
*
8
* This program is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation, either version 3 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program. If not, see <https://www.gnu.org/licenses/>.
20
*/
21
22
#include <iostream>
23
#include <iomanip>
24
25
#include "Eigen/LU"
26
27
#include "
lsst/geom/LinearTransform.h
"
28
29
namespace
lsst
{
30
namespace
geom
{
31
32
LinearTransform::ParameterVector
const
LinearTransform::getParameterVector
() const noexcept {
33
ParameterVector
r;
34
r << (*this)[
XX
], (*this)[
YX
], (*this)[
XY
], (*this)[
YY
];
35
return
r;
36
}
37
38
void
LinearTransform::setParameterVector
(
LinearTransform::ParameterVector
const
& vector)
noexcept
{
39
(*this)[
XX
] = vector[
XX
];
40
(*this)[
XY
] = vector[
XY
];
41
(*this)[
YX
] = vector[
YX
];
42
(*this)[
YY
] = vector[
YY
];
43
}
44
45
LinearTransform
const
LinearTransform::inverted
()
const
{
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
}
53
54
double
LinearTransform::computeDeterminant
() const noexcept {
return
getMatrix
().determinant(); }
55
56
LinearTransform::TransformDerivativeMatrix
LinearTransform::dTransform
(
Point2D
const
& input)
const
noexcept
{
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
}
64
65
std::ostream
&
operator<<
(
std::ostream
& os,
LinearTransform
const
& t) {
66
std::ios::fmtflags flags = os.
flags
();
67
int
prec = os.
precision
(7);
68
os.
setf
(std::ios::fixed);
69
os <<
"LinearTransform([("
<<
std::setw
(10) << t[
LinearTransform::XX
] <<
","
<<
std::setw
(10)
70
<< t[
LinearTransform::XY
] <<
"),\n"
;
71
os <<
" ("
<<
std::setw
(10) << t[
LinearTransform::YX
] <<
","
<<
std::setw
(10)
72
<< t[
LinearTransform::YY
] <<
")])"
;
73
os.
precision
(prec);
74
os.
flags
(flags);
75
return
os;
76
}
77
78
}
// namespace geom
79
}
// namespace lsst
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
LinearTransform.h
std::ostream
lsst::geom::LinearTransform
A 2D linear coordinate transformation.
Definition
LinearTransform.h:69
lsst::geom::LinearTransform::Matrix
Eigen::Matrix< double, 2, 2, Eigen::DontAlign > Matrix
Definition
LinearTransform.h:77
lsst::geom::LinearTransform::getParameterVector
ParameterVector const getParameterVector() const noexcept
Return the transform matrix elements as a parameter vector.
Definition
LinearTransform.cc:32
lsst::geom::LinearTransform::YX
@ YX
Definition
LinearTransform.h:71
lsst::geom::LinearTransform::YY
@ YY
Definition
LinearTransform.h:71
lsst::geom::LinearTransform::XX
@ XX
Definition
LinearTransform.h:71
lsst::geom::LinearTransform::XY
@ XY
Definition
LinearTransform.h:71
lsst::geom::LinearTransform::getMatrix
Matrix const & getMatrix() const noexcept
Definition
LinearTransform.h:151
lsst::geom::LinearTransform::inverted
LinearTransform const inverted() const
Return the inverse transform.
Definition
LinearTransform.cc:45
lsst::geom::LinearTransform::computeDeterminant
double computeDeterminant() const noexcept
Return the determinant of the 2x2 matrix.
Definition
LinearTransform.cc:54
lsst::geom::LinearTransform::ParameterVector
Eigen::Matrix< double, 4, 1 > ParameterVector
Definition
LinearTransform.h:73
lsst::geom::LinearTransform::LinearTransform
LinearTransform() noexcept
Construct an empty (identity) LinearTransform.
Definition
LinearTransform.h:80
lsst::geom::LinearTransform::dTransform
TransformDerivativeMatrix dTransform(Point2D const &input) const noexcept
Derivative of (*this)(input) with respect to the transform elements (for Point).
Definition
LinearTransform.cc:56
lsst::geom::LinearTransform::setParameterVector
void setParameterVector(ParameterVector const &vector) noexcept
Set the transform matrix elements from a parameter vector.
Definition
LinearTransform.cc:38
lsst::geom::LinearTransform::TransformDerivativeMatrix
Eigen::Matrix< double, 2, 4 > TransformDerivativeMatrix
Definition
LinearTransform.h:74
lsst::geom::SingularTransformException
Definition
LinearTransform.h:36
std::ostream::flags
T flags(T... args)
lsst::geom
Definition
AffineTransform.h:36
lsst::geom::operator<<
std::ostream & operator<<(std::ostream &os, lsst::geom::AffineTransform const &transform)
Definition
AffineTransform.cc:72
lsst::geom::Point2D
Point< double, 2 > Point2D
Definition
Point.h:324
lsst
std::ostream::precision
T precision(T... args)
std::ostream::setf
T setf(T... args)
std::setw
T setw(T... args)
Generated on
for lsst.geom by
1.17.0