/* 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. */ /* * AlgoMidPoint.java * * Created on 24. September 2001, 21:37 */ package org.geogebra.common.kernel.algos; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.commands.Commands; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoNumberValue; import org.geogebra.common.kernel.kernelND.GeoPointND; import org.geogebra.common.kernel.kernelND.GeoSegmentND; /** * * @author Markus */ public class AlgoVertexSegment extends AlgoElement { private GeoSegmentND segment; // input private GeoNumberValue index; // input private GeoPointND M; // output private GeoPointND P; private GeoPointND Q; // endpoints of segment /** Creates new AlgoVector */ public AlgoVertexSegment(Construction cons, String label, GeoSegmentND segment, GeoNumberValue index) { this(cons, segment, index); M.setLabel(label); } AlgoVertexSegment(Construction cons, GeoSegmentND segment, GeoNumberValue index) { super(cons); this.segment = segment; this.index = index; P = segment.getStartPoint(); Q = segment.getEndPoint(); // create new Point (2D or 3D as appropriate) if (Math.round(index.evaluateDouble()) == 2) { M = Q.copy(); } else { M = P.copy(); } setInputOutput(); // compute M = (P + Q)/2 compute(); } @Override public Commands getClassName() { return Commands.Vertex; } // for AlgoElement @Override protected void setInputOutput() { input = new GeoElement[2]; input[0] = (GeoElement) segment; input[1] = (GeoElement) index; super.setOutputLength(1); super.setOutput(0, (GeoElement) M); setDependencies(); // done by AlgoElement } // Created for LocusEqu public GeoPointND getP() { return P; } // Created for LocusEqu public GeoPointND getQ() { return Q; } public GeoPointND getPoint() { return M; } // calc midpoint @Override public final void compute() { if (!index.isDefined()) { M.setUndefined(); return; } int indexd = (int) Math.round(index.evaluateDouble()); if (indexd == 1) { M.set(P); } else if (indexd == 2) { M.set(Q); } else { M.setUndefined(); return; } } }