lsst.geom
g19811a7679+d02280c829
Toggle main menu visibility
Loading...
Searching...
No Matches
include
lsst
geom
polynomials
Function2d.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_Function2d_h_INCLUDED
23
#define LSST_AFW_MATH_POLYNOMIALS_Function2d_h_INCLUDED
24
25
#include "Eigen/Core"
26
#include "
lsst/geom/polynomials/SafeSum.h
"
27
#include "
lsst/geom/polynomials/ScaledBasis2d.h
"
28
29
namespace
lsst
{
namespace
geom
{
namespace
polynomials
{
30
41
template
<
typename
Basis_>
42
class
Function2d
{
43
public
:
44
45
using
iterator
=
double
*;
46
using
const_iterator
=
double
const
*;
47
49
using
Basis
= Basis_;
50
52
using
Workspace
=
typename
Basis::Workspace
;
53
55
explicit
Function2d
(
Basis
const
& basis) :
56
_basis(basis),
57
_coefficients(Eigen::VectorXd::Zero(basis.
size
()))
58
{}
59
61
explicit
Function2d
(
Basis
const
& basis, Eigen::VectorXd
const
& coefficients) :
62
_basis(basis),
63
_coefficients(coefficients)
64
{
65
assert(basis.
size
() ==
static_cast<
std::size_t
>
(_coefficients.size()));
66
}
67
69
template
<
typename
Iterator>
70
explicit
Function2d
(
Basis
const
& basis, Iterator first, Iterator last) :
71
_basis(basis),
72
_coefficients(basis.
size
())
73
{
74
assert(
std::distance
(first, last) ==
static_cast<
std::ptrdiff_t
>
(basis.
size
()));
75
std::copy
(first, last, &_coefficients[0]);
76
}
77
79
Function2d
(
Function2d
const
&) =
default
;
80
82
Function2d
(
Function2d
&&) =
default
;
83
85
Function2d
&
operator=
(
Function2d
const
&) =
default
;
86
88
Function2d
&
operator=
(
Function2d
&&) =
default
;
89
91
92
iterator
begin
() {
return
_coefficients.data(); }
93
iterator
end
() {
return
begin
() +
size
(); }
94
const_iterator
cbegin
()
const
{
return
_coefficients.data(); }
95
const_iterator
cend
()
const
{
return
begin
() +
size
(); }
96
const_iterator
begin
()
const
{
return
_coefficients.data(); }
97
const_iterator
end
()
const
{
return
begin
() +
size
(); }
99
101
Basis
const
&
getBasis
()
const
{
return
_basis; }
102
104
std::size_t
size
()
const
{
return
_basis.size(); }
105
107
Workspace
makeWorkspace
()
const
{
return
_basis.makeWorkspace(); }
108
110
double
operator()
(
geom::Point2D
const
& point,
SumMode
mode=
SumMode::FAST
)
const
{
111
return
_basis.sumWith(point, _coefficients, mode);
112
}
113
115
double
operator()
(
geom::Point2D
const
& point,
Workspace
& workspace,
SumMode
mode=
SumMode::FAST
)
const
{
116
return
_basis.sumWith(point, _coefficients, workspace, mode);
117
}
118
120
125
double
&
operator[]
(
std::size_t
n) {
return
begin
()[n]; }
126
double
const
&
operator[]
(
std::size_t
n)
const
{
return
begin
()[n]; }
128
130
136
auto
getCoefficients
() {
137
// Return a block view to ensure the caller only modify the values, not the size.
138
return
_coefficients.head(
size
());
139
}
140
auto
getCoefficients
()
const
{
return
_coefficients.head(
size
()); }
142
144
Function2d<typename Basis::Scaled>
scaled
(
Scaling2d
const
& scaling)
const
{
145
return
Function2d<typename Basis::Scaled>
(
getBasis
().
scaled
(scaling), _coefficients);
146
}
147
148
private
:
149
Basis
_basis;
150
Eigen::VectorXd _coefficients;
151
};
152
154
template
<
typename
Basis>
155
Function2d<Basis>
makeFunction2d
(Basis
const
& basis, Eigen::VectorXd
const
& coefficients) {
156
return
Function2d<Basis>
(basis, coefficients);
157
}
158
160
template
<
typename
Basis,
typename
Iterator>
161
Function2d<Basis>
makeFunction2d
(Basis
const
& basis, Iterator first, Iterator last) {
162
return
Function2d<Basis>
(basis, first, last);
163
}
164
165
}}}
// namespace lsst::geom::polynomials
166
167
#endif
// !LSST_AFW_MATH_POLYNOMIALS_Function2d_h_INCLUDED
SafeSum.h
ScaledBasis2d.h
lsst::geom::polynomials::Function2d
A 2-d function defined by a series expansion and its coefficients.
Definition
Function2d.h:42
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::operator=
Function2d & operator=(Function2d &&)=default
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::iterator
double * iterator
Definition
Function2d.h:45
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::operator=
Function2d & operator=(Function2d const &)=default
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::Function2d
Function2d(Basis const &basis, Eigen::VectorXd const &coefficients)
Definition
Function2d.h:61
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::makeWorkspace
Workspace makeWorkspace() const
Definition
Function2d.h:107
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::getBasis
Basis const & getBasis() const
Definition
Function2d.h:101
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::getCoefficients
auto getCoefficients()
Definition
Function2d.h:136
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::Function2d
Function2d(Function2d &&)=default
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::end
const_iterator end() const
Definition
Function2d.h:97
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::end
iterator end()
Definition
Function2d.h:93
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::cbegin
const_iterator cbegin() const
Definition
Function2d.h:94
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::const_iterator
double const * const_iterator
Definition
Function2d.h:46
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::size
std::size_t size() const
Definition
Function2d.h:104
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::operator[]
double & operator[](std::size_t n)
Definition
Function2d.h:125
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::Basis
Chebyshev1Basis2d< packing > Basis
Definition
Function2d.h:49
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >< PackingOrder::XY >::Workspace
typename Basis::Workspace Workspace
Definition
Function2d.h:52
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::operator[]
double const & operator[](std::size_t n) const
Definition
Function2d.h:126
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::getCoefficients
auto getCoefficients() const
Definition
Function2d.h:140
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::operator()
double operator()(geom::Point2D const &point, Workspace &workspace, SumMode mode=SumMode::FAST) const
Definition
Function2d.h:115
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::begin
const_iterator begin() const
Definition
Function2d.h:96
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::scaled
Function2d< typename Basis::Scaled > scaled(Scaling2d const &scaling) const
Definition
Function2d.h:144
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::operator()
double operator()(geom::Point2D const &point, SumMode mode=SumMode::FAST) const
Definition
Function2d.h:110
lsst::geom::polynomials::Function2d::Function2d
Function2d(Basis const &basis)
Construct with zero-valued coefficients.
Definition
Function2d.h:55
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::Function2d
Function2d(Basis const &basis, Iterator first, Iterator last)
Definition
Function2d.h:70
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::Function2d
Function2d(Function2d const &)=default
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::cend
const_iterator cend() const
Definition
Function2d.h:95
lsst::geom::polynomials::Function2d< Chebyshev1Basis2d< packing > >::begin
iterator begin()
Definition
Function2d.h:92
lsst::geom::polynomials::PackedBasis2d< Chebyshev1Basis1d, packing >::Workspace
PackedBasisWorkspace2d Workspace
Definition
PackedBasis2d.h:85
lsst::geom::polynomials::PackedBasis2d::size
std::size_t size() const noexcept
Return the number of basis functions.
Definition
PackedBasis2d.h:116
lsst::geom::polynomials::Scaling2d
A 2-d separable affine transform that can be used to map one interval to another.
Definition
Scaling2d.h:48
std::copy
T copy(T... args)
std::distance
T distance(T... args)
lsst::geom::polynomials
Low-level polynomials (including special polynomials) in C++.
lsst::geom::polynomials::makeFunction2d
Function2d< Basis > makeFunction2d(Basis const &basis, Eigen::VectorXd const &coefficients)
Create a Function2d of the appropriate type from a Basis2d and an Eigen object containing coefficient...
Definition
Function2d.h:155
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::ptrdiff_t
std::size_t
Generated on
for lsst.geom by
1.17.0