package org.geogebra.common.kernel.advanced; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.algos.AlgoElement; import org.geogebra.common.kernel.commands.Commands; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoList; import org.geogebra.common.kernel.geos.GeoNumberValue; import org.geogebra.common.kernel.geos.GeoNumeric; /** * Algo for Identity[n] * * @author zbynek * */ public class AlgoIdentity extends AlgoElement { private GeoNumberValue n; private GeoList result; /** * @param c * construction * @param label * label for output * @param n * size of the matrix */ public AlgoIdentity(Construction c, String label, GeoNumberValue n) { super(c); this.n = n; result = new GeoList(c); setInputOutput(); compute(); result.setLabel(label); } @Override protected void setInputOutput() { input = new GeoElement[] { n.toGeoElement() }; setOnlyOutput(result); setDependencies(); } @Override public void compute() { result.clear(); int size = (int) n.getDouble(); if (size <= 0) { result.setUndefined(); return; } for (int i = 0; i < size; i++) { GeoList toAdd = new GeoList(cons); for (int j = 0; j < size; j++) { toAdd.add(new GeoNumeric(cons, i == j ? 1 : 0)); } result.add(toAdd); } } /** * @return resulting identity matrix */ public GeoList getResult() { return result; } @Override public Commands getClassName() { return Commands.Identity; } }