/* 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. */ /* * AlgoAnglePoints.java * * Created on 30. August 2001, 21:37 */ package org.geogebra.common.geogebra3D.kernel3D.algos; import org.geogebra.common.geogebra3D.kernel3D.geos.GeoAngle3D; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Matrix.Coords; import org.geogebra.common.kernel.algos.AlgoAngleVectorsND; import org.geogebra.common.kernel.geos.GeoAngle; import org.geogebra.common.kernel.kernelND.GeoDirectionND; import org.geogebra.common.kernel.kernelND.GeoPointND; import org.geogebra.common.kernel.kernelND.GeoVectorND; /** * * @author mathieu */ public class AlgoAngleVectors3D extends AlgoAngleVectorsND { protected Coords vn; private Coords o; private Coords v1; private Coords v2; AlgoAngleVectors3D(Construction cons, String label, GeoVectorND v, GeoVectorND w) { this(cons, label, v, w, null); } AlgoAngleVectors3D(Construction cons, String label, GeoVectorND v, GeoVectorND w, GeoDirectionND orientation) { super(cons, label, v, w, orientation); } @Override protected GeoAngle newGeoAngle(Construction cons1) { GeoAngle ret = new GeoAngle3D(cons1); ret.setDrawable(true); return ret; } @Override public void compute() { // vectors directions v1 = getv().getCoordsInD3(); v2 = getw().getCoordsInD3(); // calc angle v1.calcNorm(); double l1 = v1.getNorm(); v2.calcNorm(); double l2 = v2.getNorm(); double c = v1.dotproduct(v2) / (l1 * l2); // cosinus of the angle getAngle().setValue(AlgoAnglePoints3D.acos(c)); // normal vector vn = AlgoAnglePoints3D.forceNormalVector(v1, v2); // start point GeoPointND start = getStartPoint(getv()); if (centerIsNotDrawable(start)) { o = Coords.UNDEFINED; } else { o = start.getInhomCoordsInD3(); } } @Override public Coords getVn() { return vn; } @Override public boolean getCoordsInD3(Coords[] drawCoords) { if (!o.isDefined()) { return false; } drawCoords[0] = o; drawCoords[1] = v1; drawCoords[2] = v2; return true; } }