package org.geogebra.common.kernel.kernelND; import org.geogebra.common.kernel.Matrix.CoordMatrix; import org.geogebra.common.kernel.Matrix.Coords; /** * @author mathieu * * Interface for lines (lines, segments, ray, ...) in any dimension */ public interface GeoLineND extends GeoDirectionND { /** * returns the point at position lambda on the coord sys in the dimension * given * * @param dimension * dimension of returned point * @param lambda * position on the line * @return the point at position lambda on the coord sys */ public Coords getPointInD(int dimension, double lambda); /** * @return true if tracing */ public boolean getTrace(); /** * @param m * plane * @return the (a,b,c) equation vector that describe the line in the plane * described by the matrix m (ie ax+by+c=0 is an equation of the * line in the plane) */ public Coords getCartesianEquationVector(CoordMatrix m); /** * @return coords of the starting point */ public Coords getStartInhomCoords(); /** * @return inhom coords of the end point */ public Coords getEndInhomCoords(); /** * see PathOrPoint * * @return min parameter */ public double getMinParameter(); /** * see PathOrPoint * * @return max parameter */ public double getMaxParameter(); /** * * @param p * point * @param minPrecision * precision * @return true if point is on the path */ public boolean isOnPath(GeoPointND p, double minPrecision); /** * @param coords * point * @param eps * precision * @return true if point is on path (with given precision) */ public boolean isOnPath(Coords coords, double eps); /** * when intersection point is calculated, check if not outside limited path * (segment, ray) * * @param coords * point * @param eps * precision * @return true if not outside */ public boolean respectLimitedPath(Coords coords, double eps); /** * check if the parameter is possible on the line * * @param parameter * parameter * @return true if possible */ public boolean respectLimitedPath(double parameter); /** * @param p * point * @param minPrecision * precision * @return true if point is on this line (ignoring limits for segment/ray) */ public boolean isOnFullLine(Coords p, double minPrecision); /** * @return end point */ public GeoPointND getEndPoint(); /** * @return start point */ public GeoPointND getStartPoint(); /** * Removes a point from list of points that are registered as points on this * line * * @param point * point to be removed */ public void removePointOnLine(GeoPointND point); /** * Adds a point to the list of points that this line passes through. * * @param point * point */ public void addPointOnLine(GeoPointND point); /** * returns the distance from this line to line g. * * @param g * line * @return distance distance between this and g */ public double distance(GeoLineND g); /** set equation mode to implicit */ public void setToImplicit(); /** change equation mode to explicit */ public void setToExplicit(); /** * Switch to parametric mode and set parameter name * * @param parameter * name */ public void setToParametric(String parameter); /** * * @return copy */ @Override public GeoLineND copy(); /** * make parallel line through (pointX, pointY) * * @param pointX * x coord * @param pointY * y coord */ public void setLineThrough(double pointX, double pointY); /** * * @return line direction for equation (to keep integers if some) */ public Coords getDirectionForEquation(); /** * Initialize startpoint to the closest point to (0,0,0) * * @return the start point */ public GeoPointND setStandardStartPoint(); /** * @param point * new start point */ public void setStartPoint(GeoPointND point); /** * @return line origin (in 2D the same as start point) */ public Coords getOrigin(); /** Force user input form */ public void setToUser(); /** set to general equation */ public void setToGeneral(); }