All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hfg.math.units.AngleImpl Maven / Gradle / Ivy

There is a newer version: 20240423
Show newest version
package com.hfg.math.units;


import com.hfg.exception.ProgrammingException;

//------------------------------------------------------------------------------
/**
 Base class for unit-independent angle measurement.
 
@author J. Alex Taylor, hairyfatguy.com
*/ //------------------------------------------------------------------------------ // com.hfg XML/HTML Coding Library // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com // [email protected] //------------------------------------------------------------------------------ public abstract class AngleImpl implements Angle { //########################################################################## // PRIVATE FIELDS //########################################################################## private float mValue; private AngleUnits mAngleUnits; //########################################################################## // CONSTRUCTORS //########################################################################## //-------------------------------------------------------------------------- protected AngleImpl(int inValue, AngleUnits inUnits) { mValue = inValue; mAngleUnits = inUnits; } //-------------------------------------------------------------------------- protected AngleImpl(float inValue, AngleUnits inUnits) { mValue = inValue; mAngleUnits = inUnits; } //########################################################################## // PUBLIC METHODS //########################################################################## //-------------------------------------------------------------------------- public float value() { return mValue; } //-------------------------------------------------------------------------- public AngleUnits getUnits() { return mAngleUnits; } //-------------------------------------------------------------------------- @Override public String toString() { return value() + mAngleUnits.abbrev(); } //--------------------------------------------------------------------------- public int toInt(AngleUnits inUnits) { return (int) to(inUnits); } //--------------------------------------------------------------------------- public float to(AngleUnits inUnits) { float convertedValue; if (inUnits.equals(getUnits())) { // No conversion necessary convertedValue = value(); } else { // For simplicity, start from degrees float degrees = toDegrees(); if (inUnits.equals(AngleUnits.degrees)) { convertedValue = degrees; } else if (inUnits.equals(AngleUnits.radians)) { convertedValue = (float) (degrees * Math.PI / 180d); } else { throw new ProgrammingException(inUnits + " is not a currently supported unit for conversion!"); } } return convertedValue; } //-------------------------------------------------------------------------- public void scale(float inScalingFactor) { mValue *= inScalingFactor; } //--------------------------------------------------------------------------- private float toDegrees() { float degrees; if (mAngleUnits.equals(AngleUnits.degrees)) { degrees = mValue; } else if (mAngleUnits.equals(AngleUnits.radians)) { degrees = (float) (mValue * 180d / Math.PI); } else { throw new ProgrammingException(mAngleUnits + " is not a currently supported unit for conversion!"); } return degrees; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy