/* GeoGebra - Dynamic Mathematics for Everyone http://www.geogebra.org This file is part of GeoGebra. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. */ package org.geogebra.common.kernel.algos; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.geos.GeoConic; import org.geogebra.common.kernel.geos.GeoConicPart; import org.geogebra.common.kernel.geos.GeoPoint; import org.geogebra.common.kernel.kernelND.GeoElementND; import org.geogebra.common.kernel.prover.NoSymbolicParametersException; import org.geogebra.common.kernel.prover.polynomial.PPolynomial; import org.geogebra.common.kernel.prover.polynomial.PVariable; /** * Circle arc or sector defined by three points. */ public class AlgoConicPartCircumcircle extends AlgoConicPartCircumcircleND implements SymbolicParametersBotanaAlgo { private BotanaCircleThreePoints botanaParams; public AlgoConicPartCircumcircle(Construction cons, String label, GeoPoint A, GeoPoint B, GeoPoint C, int type) { super(cons, label, A, B, C, type); } public AlgoConicPartCircumcircle(Construction cons, GeoPoint A, GeoPoint B, GeoPoint C, int type) { super(cons, A, B, C, type); } @Override protected AlgoCircleThreePoints getAlgo() { return new AlgoCircleThreePoints(cons, getA(), getB(), getC()); } @Override protected GeoConicPart createConicPart(Construction cons1, int partType) { return new GeoConicPart(cons1, partType); } /** * Method for LocusEqu. * * @return first point. */ @Override final public GeoPoint getA() { return (GeoPoint) A; } /** * Method for LocusEqu. * * @return second point. */ @Override final public GeoPoint getB() { return (GeoPoint) B; } /** * Method for LocusEqu. * * @return third point. */ @Override final public GeoPoint getC() { return (GeoPoint) C; } @Override public PVariable[] getBotanaVars(GeoElementND geo) { if (botanaParams == null) { botanaParams = new BotanaCircleThreePoints(); } return botanaParams.getVars(); } @Override public PPolynomial[] getBotanaPolynomials(GeoElementND geo) throws NoSymbolicParametersException { if (botanaParams == null) { botanaParams = new BotanaCircleThreePoints(); } return botanaParams.getPolynomials(getInput()); } @Override public GeoConicPart getConicPart() { return (GeoConicPart) super.getConicPart(); } @Override protected void computeSinglePoint() { GeoPoint midpoint = getA(); GeoConic.setSinglePoint((GeoConic) conicPart, midpoint.inhomX, midpoint.inhomY); super.computeSinglePoint(); } }