package org.geogebra.common.kernel.implicit;
import org.geogebra.common.kernel.algos.AlgoElement.OutputHandler;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.geos.GeoLine;
import org.geogebra.common.kernel.geos.GeoPoint;
import org.geogebra.common.kernel.kernelND.GeoPointND;
/**
* Helper for tangent through point / with direction to implicit curve
*
*/
public interface AlgoTangentHelper {
/** @return locus of possible tangent points */
GeoImplicit getTangentCurve();
/**
* @return defining object (direction or point)
*/
GeoElement getVec();
/**
* @return whether defining object is defined
*/
boolean vecDefined();
/**
* @param ip
* output points array
* @param tangents
* tangents handler
*/
void getTangents(GeoPoint[] ip, OutputHandler<GeoLine> tangents);
/**
* @param geo
* implicit curve
* @param line
* line
* @return tangent point of line on curve
*/
GeoPointND getTangentPoint(GeoElement geo, GeoLine line);
}