Library of Assembled Shared Sources
spline_linear.h
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2011 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43
44
45/** @class lass::num::SplineLinear
46 * @brief connects the data nodes with linear segments.
47 * @author Bram de Greve [BdG]
48 */
49
50#ifndef LASS_GUARDIAN_OF_INCLUSION_NUM_SPLINE_LINEAR_H
51#define LASS_GUARDIAN_OF_INCLUSION_NUM_SPLINE_LINEAR_H
52
53#include "num_common.h"
54#include "spline.h"
55
56namespace lass
57{
58namespace num
59{
60
61template
62<
63 typename ScalarType,
64 typename DataType,
65 typename DataTraits
66>
67class SplineLinear: public Spline<ScalarType, DataType>
68{
69public:
70
71 typedef DataTraits TDataTraits;
72 typedef Spline<ScalarType, DataType> TSplineBase;
73 typedef typename TSplineBase::TScalar TScalar;
74 typedef typename TSplineBase::TData TData;
75 typedef typename TSplineBase::ControlRange TControlRange;
76
77 SplineLinear();
78 template <typename PairInputIterator>
79 SplineLinear(PairInputIterator iFirst, PairInputIterator iLast);
80 template <typename ScalarInputIterator, typename DataInputIterator>
81 SplineLinear(ScalarInputIterator iFirstControl, ScalarInputIterator iLastControl,
82 DataInputIterator iFirstData);
83
84 const TData operator()(TScalar iX) const override;
85 const TData derivative(TScalar iX) const override;
86 const TData derivative2(TScalar iX) const override;
87 const TData integral(TScalar iA, TScalar iB) const override;
88
89 bool isEmpty() const override;
90 const TControlRange controlRange() const override;
91
92private:
93
94 struct Node
95 {
96 TData y;
97 TData dy;
98 TScalar x;
99
100 static bool less(const Node& iA, const Node& iB) { return iA.x < iB.x; }
101 };
102
103 typedef std::vector<Node> TNodes;
104 typedef typename TNodes::const_iterator TNodeConstIterator;
105
106 void init();
107 const TNodeConstIterator findNode(TScalar iX) const;
108
109
110 TNodes nodes_;
111 size_t dataDimension_;
112};
113
114
115
116}
117
118}
119
120#include "spline_linear.inl"
121
122#endif
123
124// EOF
const TControlRange controlRange() const override
return the range of control values for which the spline can interpolate.
bool isEmpty() const override
return true if the spline contains any nodes at all.
const TData derivative(TScalar iX) const override
Get the first derivative of data value that corresponds with constrol value iX.
const TData integral(TScalar iA, TScalar iB) const override
Get the integrated data value between control points iA and iB.
const TData operator()(TScalar iX) const override
Get the linear interpolated data value that corresponds with constrol value iX.
abstract base class of splines.
Definition spline.h:67
numeric types and traits.
Definition basic_ops.h:70
const SplineLinear< S, D, T >::TData SplineLinear< S, D, T >::derivative2(TScalar) const
Get the second derivative of data value that corresponds with constrol value iX.
Library for Assembled Shared Sources.
Definition config.h:53