...
Code Block | ||||
---|---|---|---|---|
| ||||
/**
* Helper function for writing data to the log.
* */
double processObjTerm(std::string name, double weight, double term) const
{
if (_objectiveCalls % _outputPeriod == 0)
_optLog << " " << name << " " << weight * term;
return weight * term;
}
/**
* The following functions must be |
The following functions must be 'const'
...
because
...
objectiveFunc()
...
is
...
const;
...
we cannot
...
call
...
member
...
functions
...
within
...
a
...
const
...
member
...
function
...
unless
...
those
...
functions
...
are
...
also
...
const.
...
These
...
functions
...
are
...
also
...
defined
...
inline
...
(definition
...
is
...
inside
...
the
...
class
...
definition)
...
for
...
efficiency:
...
the
...
compiler
...
will
...
'paste'
...
the
...
function
...
body
...
into
...
the
...
place
...
where
...
the
...
function
...
is
...
called.
Code Block | ||||
---|---|---|---|---|
| ||||
double anteriorLegsDownTerm( double roll, double rollRate, double rollAccel) const { if (_tool.get_anterior_legs_down_weight() != 0.0) { return processObjTerm("anterior_legs_down", _tool.get_anterior_legs_down_weight(), pow(roll - SimTK::Pi, 2) + _relw * pow(rollRate, 2) + _relw * pow(rollAccel, 2)); } return 0.0; } double posteriorLegsDownTerm( double twist, double twistRate, double twistAccel) const { if (_tool.get_posterior_legs_down_weight() != 0.0) { return processObjTerm("posterior_legs_down", _tool.get_posterior_legs_down_weight(), pow(twist - 0.0, 2) + _relw * pow(twistRate, 2) + _relw * pow(twistAccel, 2)); } return 0.0; } double sagittalSymmetryTerm( double hunch, double pitch, double pitchRate, double pitchAccel) const { if (_tool.get_sagittal_symmetry_weight() != 0.0) { return processObjTerm("sagittal_symmetry", _tool.get_sagittal_symmetry_weight(), pow(hunch + 2 * pitch, 2) + _relw * pow(pitchRate, 2) + _relw * pow(pitchAccel, 2)); } return 0.0; } |
...