]> git.mxchange.org Git - flightgear.git/blobdiff - src/Autopilot/inputvalue.cxx
Canvas: Add new element type map for geo mapping.
[flightgear.git] / src / Autopilot / inputvalue.cxx
index fb80263c19ee59faf71d9e68f6d71c63f570989d..331aede8d2c85041ccc6b36b2ff6e77bef64bdaf 100644 (file)
 // 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 )
@@ -34,25 +37,19 @@ 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) :