// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
+#include <cstdlib>
+
#include "inputvalue.hxx"
#include <Main/fg_props.hxx>
+
using namespace FGXMLAutopilot;
PeriodicalValue::PeriodicalValue( SGPropertyNode_ptr root )
}
}
-double PeriodicalValue::normalize( double value )
+double PeriodicalValue::normalize( double value ) const
{
- if( !(minPeriod && maxPeriod )) return value;
-
- double p1 = minPeriod->get_value();
- double p2 = maxPeriod->get_value();
-
- double min = std::min<double>(p1,p2);
- double max = std::max<double>(p1,p2);
- double phase = fabs(max - min);
-
- if( phase > SGLimitsd::min() ) {
- while( value < min ) value += phase;
- while( value >= max ) value -= phase;
- } else {
- value = min; // phase is zero
- }
+ return SGMiscd::normalizePeriodic( minPeriod->get_value(), maxPeriod->get_value(), value );
+}
- return value;
+double PeriodicalValue::normalizeSymmetric( double value ) const
+{
+ double minValue = minPeriod->get_value();
+ double maxValue = maxPeriod->get_value();
+
+ value = SGMiscd::normalizePeriodic( minValue, maxValue, value );
+ double width_2 = (maxValue - minValue)/2;
+ return value > width_2 ? width_2 - value : value;
}
InputValue::InputValue( SGPropertyNode_ptr node, double value, double offset, double scale) :