Example #1
0
        public FunctionTermCurve(FunctionTerm function)
        {
            if (function == null)
            {
                throw new ArgumentNullException("function");
            }
            if (function.DomainDimension != 1)
            {
                throw new ArgumentException("parameter 'function' has wrong domain dimension.");
            }
            if (function.CodomainDimension != 2)
            {
                throw new ArgumentException("parameter 'function' has wrong codomain dimension.");
            }

            this.point        = function;
            this.velocity     = point.GetDerivatives().Single();
            this.acceleration = velocity.GetDerivatives().Single();
            this.jerk         = acceleration.GetDerivatives().Single();

            ValueTerm position = Terms.Variable("t");

            ValueTerm speedValue = Terms.Norm(velocity.Apply(position));

            this.speed = speedValue.Abstract(position);

            ValueTerm directionValue = Terms.Angle(velocity.Apply(position));

            this.direction = directionValue.Abstract(position);

            ValueTerm curvatureValue = Terms.Quotient(direction.GetDerivatives().Single().Apply(position), speedValue);

            this.curvature = curvatureValue.Abstract(position);
        }
Example #2
0
        public FunctionTermCurve InstantiateParameter(ValueTerm parameter)
        {
            ValueTerm position = Terms.Variable("t");

            return(new FunctionTermCurve(function.Apply(position, parameter).Abstract(position)));
        }
Example #3
0
        public FunctionTermCurve TransformInput(FunctionTerm transformation)
        {
            ValueTerm position = Terms.Variable("t");

            return(new FunctionTermCurve(point.Apply(transformation.Apply(position)).Abstract(position)));
        }
Example #4
0
        static Vector2Double EvaluateVector(FunctionTerm function, double value)
        {
            IEnumerable <double> result = function.Apply(Terms.Constant(value)).Evaluate();

            return(new Vector2Double(result.ElementAt(0), result.ElementAt(1)));
        }
Example #5
0
        static double EvaluateScalar(FunctionTerm function, double value)
        {
            IEnumerable <double> result = function.Apply(Terms.Constant(value)).Evaluate();

            return(result.Single());
        }
Example #6
0
        public bool Contains(double position)
        {
            double localPosition = positionTransformation.Apply(Terms.Constant(position)).Evaluate().Single();

            return(new OrderedRange <double>(0, 1).Contains(localPosition));
        }
Example #7
0
 public static ValueTerm Apply(this FunctionTerm function, params ValueTerm[] parameters)
 {
     return(function.Apply((IEnumerable <ValueTerm>)parameters));
 }