/*
GeoGebra - Dynamic Mathematics for Everyone
http://www.geogebra.org
This file is part of GeoGebra.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation.
*/
package org.geogebra.common.kernel;
import org.apache.commons.math3.analysis.UnivariateFunction;
import org.geogebra.common.kernel.Matrix.Coords;
import org.geogebra.common.kernel.geos.ParametricCurve;
import org.geogebra.common.kernel.kernelND.GeoPointND;
/**
* Distance function of a curve that implements UnivariateFunction.
*
* @author Markus Hohenwarter
*/
public class ParametricCurveDistanceFunction implements DistanceFunction {
// private GeoPoint P;
private double px, py;
private UnivariateFunction funX, funY;
// private double mint;
// private double maxt;
/**
* Creates a function for evaluating squared distance of (px,py) from curve
* (px and py must be entered using a setter)
*
* @param curve
* curve
*/
public ParametricCurveDistanceFunction(ParametricCurve curve) {
setFunctions(curve);
}
/**
* set functions from curve
*
* @param curve
* curve
*/
public void setFunctions(ParametricCurve curve) {
funX = curve.getUnivariateFunctionX();
funY = curve.getUnivariateFunctionY();
}
/**
* Returns the square of the distance between the currently set distance
* point and this curve at parameter position t, i.e. (funX(t) - Px)^2 +
* (funY(t) - Py)^2.
*/
@Override
public double value(double t) {
double dx = funX.value(t) - px;
double dy = funY.value(t) - py;
return dx * dx + dy * dy;
}
/**
* Sets the point to be used in the distance function (funX(t) - Px)^2 +
* (funY(t) - Py)^2.
*
* @param P
* distant point
*/
@Override
public void setDistantPoint(GeoPointND P) {
Coords coords = P.getCoordsInD2();
px = coords.getX() / coords.getZ();
py = coords.getY() / coords.getZ();
}
}