/** * Initialize the spline with X and Y values. * * @param aN the number of X and Y values * @param aXValues the X values * @param aYValues the Y values */ void SimmSpline::init(Function* aFunction) { if (aFunction == NULL) return; SimmSpline* ncs = dynamic_cast<SimmSpline*>(aFunction); if (ncs != NULL) { setEqual(*ncs); } else { XYFunctionInterface xyFunc(aFunction); if (xyFunc.getNumberOfPoints() == 0) { // A SimmSpline must have at least 2 data points. // If aFunction is a Constant, use its Y value for both data points. // If it is not, make up two data points. double x[2] = {0.0, 1.0}, y[2]; Constant* cons = dynamic_cast<Constant*>(aFunction); if (cons != NULL) { y[0] = y[1] = cons->calcValue(SimTK::Vector(0)); } else { y[0] = y[1] = 1.0; } *this = SimmSpline(2, x, y); } else if (xyFunc.getNumberOfPoints() == 1) { double x[2], y[2]; x[0] = xyFunc.getXValues()[0]; x[1] = x[0] + 1.0; y[0] = y[1] = xyFunc.getYValues()[0]; *this = SimmSpline(2, x, y); } else { *this = SimmSpline(xyFunc.getNumberOfPoints(), xyFunc.getXValues(), xyFunc.getYValues()); } } }
/** * Initialize the function with X and Y values. * * @param aN the number of X and Y values * @param aXValues the X values * @param aYValues the Y values */ void PiecewiseConstantFunction::init(Function* aFunction) { if (aFunction == NULL) return; PiecewiseConstantFunction* sf = dynamic_cast<PiecewiseConstantFunction*>(aFunction); if (sf != NULL) { setEqual(*sf); } else { XYFunctionInterface xyFunc(aFunction); if (xyFunc.getNumberOfPoints() == 0) { // A PiecewiseConstantFunction must have at least 2 data points. // If aFunction is a Constant, use its Y value for both data points. // If it is not, make up two data points. double x[2] = {0.0, 1.0}, y[2]; Constant* cons = dynamic_cast<Constant*>(aFunction); if (cons != NULL) { y[0] = y[1] = cons->calcValue(SimTK::Vector(1, 0.)); } else { y[0] = y[1] = 1.0; } *this = PiecewiseConstantFunction(2, x, y); } else if (xyFunc.getNumberOfPoints() == 1) { double x[2], y[2]; x[0] = xyFunc.getXValues()[0]; x[1] = x[0] + 1.0; y[0] = y[1] = xyFunc.getYValues()[0]; *this = PiecewiseConstantFunction(2, x, y); } else { *this = PiecewiseConstantFunction(xyFunc.getNumberOfPoints(), xyFunc.getXValues(), xyFunc.getYValues()); } } }