lsst.geom
g19811a7679+d02280c829
Toggle main menu visibility
Loading...
Searching...
No Matches
src
AffineTransform.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 <iomanip>
23
24
#include "Eigen/LU"
25
26
#include "
lsst/geom/AffineTransform.h
"
27
#include "
lsst/pex/exceptions/Runtime.h
"
28
29
namespace
lsst
{
30
namespace
geom
{
31
32
AffineTransform::ParameterVector
const
AffineTransform::getParameterVector
() const noexcept {
33
ParameterVector
r;
34
r << (*this)[
XX
], (*this)[
YX
], (*this)[
XY
], (*this)[
YY
], (*this)[
X
], (*this)[
Y
];
35
return
r;
36
}
37
38
void
AffineTransform::setParameterVector
(
AffineTransform::ParameterVector
const
&vector)
noexcept
{
39
(*this)[
XX
] = vector[
XX
];
40
(*this)[
XY
] = vector[
XY
];
41
(*this)[
X
] = vector[
X
];
42
(*this)[
YX
] = vector[
YX
];
43
(*this)[
YY
] = vector[
YY
];
44
(*this)[
Y
] = vector[
Y
];
45
}
46
47
AffineTransform::Matrix
const
AffineTransform::getMatrix
() const noexcept {
48
Matrix
r;
49
r << (*this)[
XX
], (*this)[
XY
], (*this)[
X
], (*this)[
YX
], (*this)[
YY
], (*this)[
Y
], 0.0, 0.0, 1.0;
50
return
r;
51
}
52
53
AffineTransform
const
AffineTransform::inverted
()
const
{
54
LinearTransform
inv(
getLinear
().
inverted
());
55
return
AffineTransform
(inv, -inv(
getTranslation
()));
56
}
57
58
AffineTransform::TransformDerivativeMatrix
AffineTransform::dTransform
(
Point2D
const
&input)
const
noexcept
{
59
TransformDerivativeMatrix
r = TransformDerivativeMatrix::Zero();
60
r.block<2, 4>(0, 0) =
getLinear
().dTransform(input);
61
r(0,
X
) = 1.0;
62
r(1,
Y
) = 1.0;
63
return
r;
64
}
65
66
AffineTransform::TransformDerivativeMatrix
AffineTransform::dTransform
(
Extent2D
const
&input)
const
noexcept
{
67
TransformDerivativeMatrix
r = TransformDerivativeMatrix::Zero();
68
r.block<2, 4>(0, 0) =
getLinear
().dTransform(input);
69
return
r;
70
}
71
72
std::ostream
&
operator<<
(
std::ostream
&os,
AffineTransform
const
&transform) {
73
std::ios::fmtflags flags = os.
flags
();
74
AffineTransform::Matrix
const
&matrix = transform.getMatrix();
75
int
prec = os.
precision
(7);
76
os.
setf
(std::ios::fixed);
77
os <<
"AffineTransform([("
<<
std::setw
(10) << matrix(0, 0) <<
","
<<
std::setw
(10) << matrix(0, 1) <<
","
78
<<
std::setw
(10) << matrix(0, 2) <<
"),\n"
;
79
os <<
" ("
<<
std::setw
(10) << matrix(1, 0) <<
","
<<
std::setw
(10) << matrix(1, 1) <<
","
80
<<
std::setw
(10) << matrix(1, 2) <<
"),\n"
;
81
os <<
" ("
<<
std::setw
(10) << matrix(2, 0) <<
","
<<
std::setw
(10) << matrix(2, 1) <<
","
82
<<
std::setw
(10) << matrix(2, 2) <<
")])"
;
83
os.
precision
(prec);
84
os.
flags
(flags);
85
return
os;
86
}
87
88
AffineTransform
makeAffineTransformFromTriple
(
Point2D
const
&p1,
Point2D
const
&p2,
Point2D
const
&p3,
89
Point2D
const
&q1,
Point2D
const
&q2,
Point2D
const
&q3) {
90
Eigen::Matrix3d mp;
91
mp << p1.getX(), p2.getX(), p3.getX(), p1.getY(), p2.getY(), p3.getY(), 1.0, 1.0, 1.0;
92
93
Eigen::Matrix3d mq;
94
mq << q1.getX(), q2.getX(), q3.getX(), q1.getY(), q2.getY(), q3.getY(), 1.0, 1.0, 1.0;
95
96
Eigen::Matrix3d m = mq * mp.inverse();
97
return
AffineTransform
(m);
98
}
99
100
}
// namespace geom
101
}
// namespace lsst
AffineTransform.h
Runtime.h
std::ostream
lsst::geom::AffineTransform
An affine coordinate transformation consisting of a linear transformation and an offset.
Definition
AffineTransform.h:75
lsst::geom::AffineTransform::dTransform
TransformDerivativeMatrix dTransform(Point2D const &input) const noexcept
Take the derivative of (*this)(input) w.r.t the transform elements.
Definition
AffineTransform.cc:58
lsst::geom::AffineTransform::setParameterVector
void setParameterVector(ParameterVector const &vector) noexcept
Set the transform matrix elements from a parameter vector.
Definition
AffineTransform.cc:38
lsst::geom::AffineTransform::getMatrix
Matrix const getMatrix() const noexcept
Return the transform as a full 3x3 matrix.
Definition
AffineTransform.cc:47
lsst::geom::AffineTransform::getParameterVector
ParameterVector const getParameterVector() const noexcept
Return the transform matrix elements as a parameter vector.
Definition
AffineTransform.cc:32
lsst::geom::AffineTransform::inverted
AffineTransform const inverted() const
Return the inverse transform.
Definition
AffineTransform.cc:53
lsst::geom::AffineTransform::getTranslation
Extent2D const & getTranslation() const noexcept
Definition
AffineTransform.h:152
lsst::geom::AffineTransform::TransformDerivativeMatrix
Eigen::Matrix< double, 2, 6 > TransformDerivativeMatrix
Definition
AffineTransform.h:81
lsst::geom::AffineTransform::Matrix
Eigen::Matrix3d Matrix
Definition
AffineTransform.h:79
lsst::geom::AffineTransform::YY
@ YY
Definition
AffineTransform.h:77
lsst::geom::AffineTransform::YX
@ YX
Definition
AffineTransform.h:77
lsst::geom::AffineTransform::X
@ X
Definition
AffineTransform.h:77
lsst::geom::AffineTransform::Y
@ Y
Definition
AffineTransform.h:77
lsst::geom::AffineTransform::XY
@ XY
Definition
AffineTransform.h:77
lsst::geom::AffineTransform::XX
@ XX
Definition
AffineTransform.h:77
lsst::geom::AffineTransform::AffineTransform
AffineTransform() noexcept
Construct an empty (identity) AffineTransform.
Definition
AffineTransform.h:84
lsst::geom::AffineTransform::ParameterVector
Eigen::Matrix< double, 6, 1 > ParameterVector
Definition
AffineTransform.h:80
lsst::geom::AffineTransform::getLinear
LinearTransform const & getLinear() const noexcept
Definition
AffineTransform.h:155
lsst::geom::LinearTransform
A 2D linear coordinate transformation.
Definition
LinearTransform.h:69
std::ostream::flags
T flags(T... args)
lsst::geom
Definition
AffineTransform.h:36
lsst::geom::makeAffineTransformFromTriple
AffineTransform makeAffineTransformFromTriple(Point2D const &p1, Point2D const &p2, Point2D const &p3, Point2D const &q1, Point2D const &q2, Point2D const &q3)
Definition
AffineTransform.cc:88
lsst::geom::Extent2D
Extent< double, 2 > Extent2D
Definition
Extent.h:400
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