protected GeoElement[] processImplicitPoly(Equation equ) { GeoElement[] ret = new GeoElement[1]; String label = equ.getLabel(); Polynomial lhs = equ.getNormalForm(); boolean isIndependent = !equ.isFunctionDependent() && lhs.isConstant(); GeoImplicitPoly poly; GeoElement geo = null; if (isIndependent) { poly = kernel.ImplicitPoly(label, lhs); poly.setUserInput(equ); geo = poly; } else { geo = kernel.DependentImplicitPoly(label, equ); // might also return Line or Conic if (geo instanceof GeoUserInputElement) { ((GeoUserInputElement) geo).setUserInput(equ); } } ret[0] = geo; // Application.debug("User Input: "+equ); ret[0].updateRepaint(); return ret; }
public GeoElement[] processEquation(Equation equ) throws MyError { // Application.debug("EQUATION: " + equ); // Application.debug("NORMALFORM POLYNOMIAL: " + equ.getNormalForm()); try { equ.initEquation(); // Application.debug("EQUATION: " + equ.getNormalForm()); // check no terms in z checkNoTermsInZ(equ); if (equ.isFunctionDependent()) { return processImplicitPoly(equ); } // consider algebraic degree of equation // check not equation of eg plane switch (equ.degree()) { // linear equation -> LINE case 1: return processLine(equ, false); // quadratic equation -> CONIC case 2: return processConic(equ); default: // test for "y= <rhs>" here as well if (equ.getLHS().toString().trim().equals("y")) { Function fun = new Function(equ.getRHS()); // try to use label of equation fun.setLabel(equ.getLabel()); return processFunction(null, fun); } return processImplicitPoly(equ); } } catch (MyError eqnError) { eqnError.printStackTrace(); // invalid equation: maybe a function of form "y = <rhs>"? String lhsStr = equ.getLHS().toString().trim(); if (lhsStr.equals("y")) { try { // try to create function from right hand side Function fun = new Function(equ.getRHS()); // try to use label of equation fun.setLabel(equ.getLabel()); return processFunction(null, fun); } catch (MyError funError) { funError.printStackTrace(); } } // throw invalid equation error if we get here if (eqnError.getMessage() == "InvalidEquation") throw eqnError; else { String[] errors = {"InvalidEquation", eqnError.getLocalizedMessage()}; throw new MyError(app, errors); } } }