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

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

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

import com.hfg.util.StringUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

//------------------------------------------------------------------------------
/**
 Interface for unit-independent angle measurement.
 For an example of use, see DmlGradientFill.
 
@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 interface Angle { public float to(AngleUnits inUnits); public int toInt(AngleUnits inUnits); public void scale(float inScalingFactor); public static final Pattern MEASUREMENT_PATTERN = Pattern.compile("(\\-?[\\d\\.]+)(\\w+)?"); //-------------------------------------------------------------------------- /** Function for converting a string representation of an angle into its appropriate object. @param inStringValue the string representation (ex: "10deg", "12rad", or "17.5") @param inDefaultUnits the units to use if the string representation is unit-less. @return a Angle-implementing object */ public static Angle allocate(String inStringValue, AngleUnits inDefaultUnits) { if (! StringUtil.isSet(inStringValue)) { throw new RuntimeException("No String value sent to Angle.allocate()!"); } inStringValue = inStringValue.trim(); Matcher m = MEASUREMENT_PATTERN.matcher(inStringValue); if (! m.matches()) { throw new RuntimeException(StringUtil.singleQuote(inStringValue) + " could not be interpreted by Angle.allocate()!"); } float floatVal = Float.parseFloat(m.group(1)); Angle angle = null; AngleUnits units = AngleUnits.valueOf(m.group(2)); if (null == units) { units = inDefaultUnits; } if (units.equals(AngleUnits.degrees)) { angle = new Degrees(floatVal); } else if (units.equals(AngleUnits.radians)) { angle = new Radians(floatVal); } return angle; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy