cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
nmrMultiVariablePowerBasis.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Ofri Sadowsky
7  Created on: 2003-08-20
8 
9  (C) Copyright 2003-2007 Johns Hopkins University (JHU), All Rights
10  Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 */
20 
21 
22 #ifndef _nmrMultiVariablePowerBasis_h
23 #define _nmrMultiVariablePowerBasis_h
24 
28 
38 {
39 public:
40  typedef double VariableType;
44 
45 protected:
48 
49 public:
51  {
52  Initialize(numVariables, maxPower);
53  }
54 
56  {}
57 
62  void Initialize(VariableIndexType numVariables, PowerType maxPower);
63 
65  {
66  return BasisContainer.rows();
67  }
68 
70  {
71  return BasisContainer.cols() - 1;
72  }
73 
75  {
76  return BasisContainer.Element(variableIndex, 1);
77  }
78 
80  void GetVariables(VariableType vars[]) const
81  {
82  vctDynamicVectorRef<VariableType> varsVector(GetNumVariables(), vars);
83  varsVector.Assign(BasisContainer.Column(1));
84  }
85 
88  {
89  return BasisContainer.Column(1).SumOfElements();
90  }
91 
94  {
95  return BasisContainer.Element(var, power);
96  }
97 
99  virtual void SetVariable(VariableIndexType varIndex, VariableType value) = 0;
100 
106  virtual void SetVariables(const VariableType vars[]) = 0;
107 
108 
111  virtual bool CanSetVariable(VariableIndexType varIndex) const = 0;
112 
122  ValueType EvaluatePowerProduct(const PowerType powers[]) const;
123 
124 protected:
126  void PrivateSetVariable(VariableIndexType varIndex, VariableType value);
127 
128 public:
134  class StandardPowerBasis;
135 
139  class BarycentricBasis;
140 };
141 
142 class CISST_EXPORT nmrMultiVariablePowerBasis::StandardPowerBasis : public nmrMultiVariablePowerBasis
143 {
144 public:
147  : BaseType(numVariables, maxPower)
148  {}
149 
150  virtual bool CanSetVariable(VariableIndexType varIndex) const
151  { return ( (0 <= varIndex) && (varIndex < GetNumVariables()) ); }
152 
153  virtual void SetVariable(VariableIndexType varIndex, VariableType value)
154  {
155  CMN_ASSERT(CanSetVariable(varIndex));
156  PrivateSetVariable(varIndex, value);
157  }
158 
159  virtual void SetVariables(VariableType const vars[]);
160 };
161 
162 
164 {
165 protected:
167 public:
169  BarycentricBasis(VariableIndexType numVariables, PowerType maxPower,
170  VariableIndexType implicitVarIndex = -1);
171 
174  {
175  return GetVariable(ImplicitVarIndex);
176  }
177 
180  {
181  return ImplicitVarIndex;
182  }
183 
186  {
187  CMN_ASSERT( (0 <= newIndex) && (newIndex < GetNumVariables()) );
188  ImplicitVarIndex = newIndex;
189  }
190 
191  virtual bool CanSetVariable(VariableIndexType varIndex) const
192  {
193  return ( (0 <= varIndex) &&
194  (varIndex < GetNumVariables()) &&
195  (varIndex != GetImplicitVarIndex()) );
196  }
197 
198  virtual void SetVariable(VariableIndexType varIndex, VariableType value);
199 
200  virtual void SetVariables(VariableType const vars[]);
201 };
202 
203 #endif
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
virtual void SetVariables(const VariableType vars[])=0
Declaration of vctDynamicMatrix.
#define CMN_ASSERT(expr)
Definition: cmnAssert.h:90
StandardPowerBasis(VariableIndexType numVariables, PowerType maxPower)
Definition: nmrMultiVariablePowerBasis.h:146
ThisType & Assign(const vctDynamicConstVectorBase< __vectorOwnerType, value_type > &other)
Definition: vctDynamicVectorBase.h:242
VariableIndexType GetNumVariables() const
Definition: nmrMultiVariablePowerBasis.h:64
Dynamic vector referencing existing memory.
Definition: vctDynamicVectorRef.h:77
nmrPolynomialTermPowerIndex::VariableIndexType VariableIndexType
Definition: nmrMultiVariablePowerBasis.h:42
int VariableIndexType
Definition: nmrPolynomialTermPowerIndex.h:95
nmrPolynomialTermPowerIndex::PowerType PowerType
Definition: nmrMultiVariablePowerBasis.h:41
void GetVariables(VariableType vars[]) const
Definition: nmrMultiVariablePowerBasis.h:80
virtual bool CanSetVariable(VariableIndexType varIndex) const
Definition: nmrMultiVariablePowerBasis.h:150
nmrMultiVariablePowerBasis(VariableIndexType numVariables, PowerType maxPower)
Definition: nmrMultiVariablePowerBasis.h:50
int PowerType
Definition: nmrPolynomialTermPowerIndex.h:98
BarycentricBasis(VariableIndexType numVariables, PowerType maxPower, VariableIndexType implicitVarIndex=-1)
vctDynamicMatrix< VariableType > BasisContainerType
Definition: nmrMultiVariablePowerBasis.h:46
nmrMultiVariablePowerBasis BaseType
Definition: nmrMultiVariablePowerBasis.h:145
VariableType GetVariable(VariableIndexType variableIndex) const
Definition: nmrMultiVariablePowerBasis.h:74
VariableIndexType ImplicitVarIndex
Definition: nmrMultiVariablePowerBasis.h:166
VariableType GetVariablePower(VariableIndexType var, PowerType power) const
Definition: nmrMultiVariablePowerBasis.h:93
double VariableType
Definition: nmrMultiVariablePowerBasis.h:40
virtual void SetVariable(VariableIndexType varIndex, VariableType value)=0
Definition: nmrMultiVariablePowerBasis.h:37
Declare class nmrPolynomialTermPowerIndex to represent the power index of a single term in a multi-va...
virtual void SetVariable(VariableIndexType varIndex, VariableType value)
Definition: nmrMultiVariablePowerBasis.h:153
void SetImplicitVarIndex(VariableIndexType newIndex)
Definition: nmrMultiVariablePowerBasis.h:185
VariableType GetImplicitVariable() const
Definition: nmrMultiVariablePowerBasis.h:173
PowerType GetMaxDegree() const
Definition: nmrMultiVariablePowerBasis.h:69
VariableIndexType GetImplicitVarIndex() const
Definition: nmrMultiVariablePowerBasis.h:179
VariableType GetSumOfVariables() const
Definition: nmrMultiVariablePowerBasis.h:87
virtual bool CanSetVariable(VariableIndexType varIndex) const =0
BasisContainerType BasisContainer
Definition: nmrMultiVariablePowerBasis.h:47
void PrivateSetVariable(VariableIndexType varIndex, VariableType value)
Rules of exporting.
VariableType ValueType
Definition: nmrMultiVariablePowerBasis.h:43
virtual ~nmrMultiVariablePowerBasis()
Definition: nmrMultiVariablePowerBasis.h:55