package org.geogebra.common.kernel.algos; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.prover.NoSymbolicParametersException; import org.geogebra.common.kernel.prover.polynomial.PPolynomial; import org.geogebra.common.kernel.prover.polynomial.PVariable; public class BotanaCircleThreePoints { private PVariable[] botanaVars; private PPolynomial[] botanaPolynomials; public PPolynomial[] getPolynomials(GeoElement[] input) throws NoSymbolicParametersException { if (botanaPolynomials != null) { return botanaPolynomials; } PVariable[] circle1vars, circle2vars, circle3vars; circle1vars = ((SymbolicParametersBotanaAlgo) input[0]) .getBotanaVars(input[0]); if (botanaVars == null) { botanaVars = new PVariable[4]; // Virtual center: botanaVars[0] = new PVariable(input[0].getKernel()); botanaVars[1] = new PVariable(input[0].getKernel()); // Point on the circle: botanaVars[2] = circle1vars[0]; botanaVars[3] = circle1vars[1]; } PVariable[] centerVars = { botanaVars[0], botanaVars[1] }; circle2vars = ((SymbolicParametersBotanaAlgo) input[1]) .getBotanaVars(input[1]); circle3vars = ((SymbolicParametersBotanaAlgo) input[2]) .getBotanaVars(input[2]); botanaPolynomials = new PPolynomial[2]; // AO=OB botanaPolynomials[0] = PPolynomial.equidistant(circle1vars[0], circle1vars[1], centerVars[0], centerVars[1], circle2vars[0], circle2vars[1]); // AO=OC botanaPolynomials[1] = PPolynomial.equidistant(circle1vars[0], circle1vars[1], centerVars[0], centerVars[1], circle3vars[0], circle3vars[1]); return botanaPolynomials; } public PVariable[] getVars() { return botanaVars; } }