Example usage for org.apache.commons.math3.analysis.polynomials PolynomialSplineFunction derivative

List of usage examples for org.apache.commons.math3.analysis.polynomials PolynomialSplineFunction derivative

Introduction

In this page you can find the example usage for org.apache.commons.math3.analysis.polynomials PolynomialSplineFunction derivative.

Prototype

public UnivariateFunction derivative() 

Source Link

Document

Get the derivative of the polynomial spline function.

Usage

From source file:de.biomedical_imaging.traJ.features.SplineCurveDynamicsFeature.java

@Override
public double[] evaluate() {
    PolynomialSplineFunction spline = null;
    if (recalculate) {
        splinefit = new TrajectorySplineFit(t, nSegments);
        spline = splinefit.calculateSpline();
    } else {/*from   w  w  w .j a  va2  s. c  om*/
        spline = splinefit.getSpline();
    }
    if (!splinefit.wasSuccessfull()) {
        return new double[] { Double.NaN, Double.NaN, Double.NaN };
    }
    Trajectory tr = splinefit.getRotatedTrajectory();
    UnivariateFunction derivative = spline.derivative();
    int N = 0;
    double sumParallel = 0;
    double sumPerpendicular = 0;
    //Split each step into replacment rependicular and parallel to spline tangent
    for (int i = timelag; i < t.size(); i += timelag) {
        Point2D.Double pRef = splinefit.minDistancePointSpline(new Point2D.Double(tr.get(i).x, tr.get(i).y),
                50);

        Point2D.Double pTangend = new Point2D.Double(pRef.x + 1,
                derivative.value(pRef.x) * (pRef.x + 1 - pRef.x) + spline.value(pRef.x));

        Point2D.Double pNormal = new Point2D.Double(-1 * pTangend.y, pTangend.x);

        Point2D.Double dp = new Point2D.Double(pRef.x + tr.get(i).x - tr.get(i - timelag).x,
                pRef.y + tr.get(i).y - tr.get(i - timelag).y);
        sumParallel += Math.pow(splinefit.distancePointLine(pRef, pNormal, dp), 2);
        sumPerpendicular += Math.pow(splinefit.distancePointLine(pRef, pTangend, dp), 2);

        N++;
    }
    //System.out.println("N: " +spline.getN());
    double msdParallel = sumParallel / N;
    double msdPerpendicular = sumPerpendicular / N;
    result = new double[] { msdParallel, msdPerpendicular, N };
    recalculate = false;
    return result;
}