package org.geogebra.common.kernel.implicit; import org.geogebra.common.kernel.MyPoint; import org.geogebra.common.kernel.Path; import org.geogebra.common.kernel.Matrix.CoordSys; import org.geogebra.common.kernel.Matrix.Coords; import org.geogebra.common.kernel.arithmetic.Equation; import org.geogebra.common.kernel.arithmetic.ExpressionValue; import org.geogebra.common.kernel.arithmetic.FunctionNVar; import org.geogebra.common.kernel.geos.GeoList; import org.geogebra.common.kernel.geos.GeoLocusND; /** * Interface for iplicit curves */ public interface GeoImplicit extends Path { /** * @return coefficients */ double[][] getCoeff(); /** * @param coeff * coefficients */ void setCoeff(double[][] coeff); /** * @param coeff * factored coefficients */ void setCoeff(double[][][] coeff); /** * Reset undefined flag */ void setDefined(); /** * @return total degree */ int getDeg(); /** * @return whether it's visible in at least one view */ boolean isOnScreen(); /** * @return locus for drawing */ GeoLocusND<? extends MyPoint> getLocus(); /** * @return degree in x or -1 */ int getDegX(); /** * @return degree in y or -1 */ int getDegY(); /** * Switch to user input form */ void setInputForm(); /** * @param dx * horizontal shift * @param dy * vertical shift */ void translate(double dx, double dy); /** * @return LHS-RHS */ FunctionNVar getExpression(); /** * @return whether user input can be used */ boolean isValidInputForm(); /** * @return whether the print form is input */ boolean isInputForm(); /** * Switch print form to expanded */ void setExtendedForm(); /** * @param equation * equation * @param coeff * coefficients for polynomial or null */ void fromEquation(Equation equation, double[][] coeff); /** * Make sure locus points are not computed */ void preventPathCreation(); /** * @param coeff * coefficients */ void setCoeff(ExpressionValue[][] coeff); /** * @param points * list of points */ void throughPoints(GeoList points); /** * @param x * x * @param y * y * @return f_x(x,y) where f = lhs-rhs */ double derivativeX(double x, double y); /** * @param x * x * @param y * y * @return f_y(x,y) where f = lhs-rhs */ double derivativeY(double x, double y); /** * @param x * x * @param y * y * @return f(x,y) where f = lhs-rhs */ double evaluateImplicitCurve(double x, double y); /** * * @return coord sys for transformations */ public CoordSys getTransformedCoordSys(); /** * * @return function expression creating this implicit curve */ public FunctionNVar getFunctionDefinition(); /** * * @return plane equation */ public Coords getPlaneEquation(); /** * * @return z-coord translation (if exists) */ public double getTranslateZ(); }