lsst.geom
g19811a7679+d02280c829
Toggle main menu visibility
Loading...
Searching...
No Matches
include
lsst
geom
polynomials
ScaledBasis2d.h
Go to the documentation of this file.
1
// -*- LSST-C++ -*-
2
/*
3
* Developed for the LSST Data Management System.
4
* This product includes software developed by the LSST Project
5
* (https://www.lsst.org).
6
* See the COPYRIGHT file at the top-level directory of this distribution
7
* for details of code ownership.
8
*
9
* This program is free software: you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation, either version 3 of the License, or
12
* (at your option) any later version.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this program. If not, see <https://www.gnu.org/licenses/>.
21
*/
22
#ifndef LSST_AFW_MATH_POLYNOMIALS_ScaledBasis2d_h_INCLUDED
23
#define LSST_AFW_MATH_POLYNOMIALS_ScaledBasis2d_h_INCLUDED
24
25
#include "
lsst/geom/polynomials/Scaling2d.h
"
26
27
namespace
lsst
{
namespace
geom
{
namespace
polynomials
{
28
29
template
<
typename
Basis>
30
class
Function2d
;
31
42
template
<
typename
Nested>
43
class
ScaledBasis2d
{
44
public
:
45
47
using
Function
=
Function2d<ScaledBasis2d>
;
48
50
using
Scaled
=
ScaledBasis2d<Nested>
;
51
53
using
Workspace
=
typename
Nested::Workspace;
54
56
using
IndexRange
=
typename
Nested::IndexRange;
57
59
explicit
ScaledBasis2d
(Nested
const
& nested,
Scaling2d
const
& scaling) :
60
_nested(nested),
61
_scaling(scaling)
62
{}
63
77
ScaledBasis2d
(
std::size_t
order,
Box2D
const
& box) :
78
_nested(order),
79
_scaling(
makeUnitRangeScaling2d
(box))
80
{}
81
83
ScaledBasis2d
(
ScaledBasis2d
const
&) =
default
;
84
86
ScaledBasis2d
(
ScaledBasis2d
&&) =
default
;
87
89
ScaledBasis2d
&
operator=
(
ScaledBasis2d
const
&) =
default
;
90
92
ScaledBasis2d
&
operator=
(
ScaledBasis2d
&&) =
default
;
93
95
Nested
const
&
getNested
() const noexcept {
return
_nested; }
96
98
Scaling2d
const
&
getScaling
() const noexcept {
return
_scaling; }
99
101
std::size_t
getOrder
()
const
{
return
getNested
().getOrder(); }
102
104
std::size_t
size
()
const
{
return
getNested
().size(); }
105
112
Scaled
scaled
(
Scaling2d
const
& first)
const
{
113
return
getNested
().
scaled
(first.
then
(
getScaling
()));
114
}
115
117
int
index
(
int
x,
int
y)
const
{
return
getNested
().index(x, y); }
118
139
IndexRange
getIndices
()
const
{
return
getNested
().getIndices(); }
140
142
Workspace
makeWorkspace
()
const
{
return
getNested
().makeWorkspace();}
143
162
template
<
typename
Vector>
163
double
sumWith
(
geom::Point2D
const
& point, Vector
const
& coefficients,
164
SumMode
mode=
SumMode::FAST
)
const
{
165
return
getNested
().sumWith(
getScaling
().applyForward(point), coefficients, mode);
166
}
167
169
template
<
typename
Vector>
170
double
sumWith
(
geom::Point2D
const
& point, Vector
const
& coefficients,
171
Workspace
& workspace,
SumMode
mode=
SumMode::FAST
)
const
{
172
return
getNested
().sumWith(
getScaling
().applyForward(point), coefficients, workspace, mode);
173
}
174
185
template
<
typename
Vector>
186
void
fill
(
geom::Point2D
const
& point, Vector && basis)
const
{
187
return
getNested
().fill(
getScaling
().applyForward(point),
188
std::forward<Vector>
(basis));
189
}
190
192
template
<
typename
Vector>
193
void
fill
(
geom::Point2D
const
& point, Vector && basis,
Workspace
& workspace)
const
{
194
return
getNested
().fill(
getScaling
().applyForward(point),
195
std::forward<Vector>
(basis),
196
workspace);
197
}
198
199
private
:
200
Nested _nested;
201
Scaling2d
_scaling;
202
};
203
204
}}}
// namespace lsst::geom::polynomials
205
206
#endif
// !LSST_AFW_MATH_POLYNOMIALS_ScaledBasis2d_h_INCLUDED
Scaling2d.h
lsst::geom::Box2D
A floating-point coordinate rectangle geometry.
Definition
Box.h:413
lsst::geom::polynomials::Function2d
A 2-d function defined by a series expansion and its coefficients.
Definition
Function2d.h:42
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::Workspace
typename Chebyshev1Basis2d< packing >::Workspace Workspace
Definition
ScaledBasis2d.h:53
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::getScaling
Scaling2d const & getScaling() const noexcept
Definition
ScaledBasis2d.h:98
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::sumWith
double sumWith(geom::Point2D const &point, Vector const &coefficients, Workspace &workspace, SumMode mode=SumMode::FAST) const
Definition
ScaledBasis2d.h:170
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::Function
Function2d< ScaledBasis2d > Function
Definition
ScaledBasis2d.h:47
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::fill
void fill(geom::Point2D const &point, Vector &&basis, Workspace &workspace) const
Definition
ScaledBasis2d.h:193
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::ScaledBasis2d
ScaledBasis2d(ScaledBasis2d const &)=default
lsst::geom::polynomials::ScaledBasis2d::ScaledBasis2d
ScaledBasis2d(Nested const &nested, Scaling2d const &scaling)
Construct a scaled basis from a nested basis and a scaling transform.
Definition
ScaledBasis2d.h:59
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::getNested
Chebyshev1Basis2d< packing > const & getNested() const noexcept
Definition
ScaledBasis2d.h:95
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::Scaled
ScaledBasis2d< Chebyshev1Basis2d< packing > > Scaled
Definition
ScaledBasis2d.h:50
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::ScaledBasis2d
ScaledBasis2d(std::size_t order, Box2D const &box)
Definition
ScaledBasis2d.h:77
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::getIndices
IndexRange getIndices() const
Definition
ScaledBasis2d.h:139
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::ScaledBasis2d
ScaledBasis2d(ScaledBasis2d &&)=default
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::makeWorkspace
Workspace makeWorkspace() const
Definition
ScaledBasis2d.h:142
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::operator=
ScaledBasis2d & operator=(ScaledBasis2d &&)=default
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::size
std::size_t size() const
Definition
ScaledBasis2d.h:104
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::scaled
Scaled scaled(Scaling2d const &first) const
Definition
ScaledBasis2d.h:112
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::fill
void fill(geom::Point2D const &point, Vector &&basis) const
Definition
ScaledBasis2d.h:186
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::operator=
ScaledBasis2d & operator=(ScaledBasis2d const &)=default
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::getOrder
std::size_t getOrder() const
Definition
ScaledBasis2d.h:101
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::sumWith
double sumWith(geom::Point2D const &point, Vector const &coefficients, SumMode mode=SumMode::FAST) const
Definition
ScaledBasis2d.h:163
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >::index
int index(int x, int y) const
Definition
ScaledBasis2d.h:117
lsst::geom::polynomials::ScaledBasis2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::IndexRange
typename Chebyshev1Basis2d< packing >::IndexRange IndexRange
Definition
ScaledBasis2d.h:56
lsst::geom::polynomials::Scaling2d
A 2-d separable affine transform that can be used to map one interval to another.
Definition
Scaling2d.h:48
lsst::geom::polynomials::Scaling2d::then
Scaling2d then(Scaling2d const &second) const noexcept
Compose two transforms.
Definition
Scaling2d.h:100
std::forward
T forward(T... args)
lsst::geom::polynomials
Low-level polynomials (including special polynomials) in C++.
lsst::geom::polynomials::makeUnitRangeScaling2d
Scaling2d makeUnitRangeScaling2d(geom::Box2D const &box)
Return a Scaling1d that maps the given box to [-1, 1]x[-1, 1].
Definition
Scaling2d.h:112
lsst::geom::polynomials::SumMode
SumMode
Enum used to control how to sum polynomial terms.
Definition
SafeSum.h:32
lsst::geom::polynomials::SumMode::FAST
@ FAST
Summation using regular floating-point addition.
Definition
SafeSum.h:34
lsst::geom
Definition
AffineTransform.h:36
lsst::geom::Point2D
Point< double, 2 > Point2D
Definition
Point.h:324
lsst
std::size_t
Generated on
for lsst.geom by
1.17.0