/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.albite.util.units; /** * The Unit class represents a physical unit<p /> * * The model used is this:<br /> * <i>inMainUnits = (ratio * inCurrentUnits + a) * x</i><br /> * <i>inCurrentUnits = (inMainUnits - (a * x)) / (ratio * x)</i> * @author albus */ public class Unit { /* * Temperature */ public static final Unit CELSIUS = new Unit("Celsius (C)", 1); public static final Unit FAHRENHEIT = new Unit("Fahrenheit (F)", 1, -32, 0.55556); public static final Unit DEGREE_OF_FROST = new Unit("Degree of frost", -0.55556); public static final Unit KELVIN = new Unit("Kelvin (K)", 1, -273.15, 1); /* * Length */ public static final Unit MILLIMETRE = new Unit("Millimetre (mm)", 0.001); public static final Unit CENTIMETRE = new Unit("Centimetre (cm)", 0.01); public static final Unit DECIMETRE = new Unit("Decimetre (dm)", 0.1); public static final Unit METRE = new Unit("Metre (m)", 1); public static final Unit KILOMETRE = new Unit("Kilometre (km)", 1000); public static final Unit THOU = new Unit("Thou (mil)", 0.0000254); public static final Unit INCH = new Unit("Inch (in)", 0.0254); public static final Unit FOOT = new Unit("Foot (ft)", 0.3048); public static final Unit YARD = new Unit("Yard (yd)", 0.9144); public static final Unit FATHOM = new Unit("Fathom (fm)", 1.8288); public static final Unit CHAIN = new Unit("Chain (ch)", 20.11684); public static final Unit FURLONG = new Unit("Furlong (fur)", 201.168); public static final Unit MILE = new Unit("Mile (mi)", 1609.344); public static final Unit LEAGUE = new Unit("League (land)", 4828.032); public static final Unit CABLE = new Unit("Cable", 185.3184); public static final Unit NAUTICAL_MILE = new Unit("Nautical Mile (nmi)", 1852); public static final Unit ROD = new Unit("Rod (H)", 5.0292); /* * Area */ public static final Unit SQUARE_MILLIMETRE = new Unit("Square Millimetre (mm2)", 0.000001); public static final Unit SQUARE_CENTIMETRE = new Unit("Square Centimetre (cm2)", 0.0001); public static final Unit SQUARE_DECIMETRE = new Unit("Square Decimetre (dc2)", 0.01); public static final Unit SQUARE_METRE = new Unit("Square Metre (m2)", 1); public static final Unit ARE = new Unit("Are (a)", 100); public static final Unit DECARE = new Unit("Decare (daa)", 1000); public static final Unit HECTARE = new Unit("Hectare (ha)", 10000); public static final Unit SQUARE_KILOMETRE = new Unit("Square Kilometre (km2)", 1000000); public static final Unit SQUARE_FOOT = new Unit("Square Foot (sq ft)", 0.09290304); public static final Unit SQUARE_YARD = new Unit("Square Yard (sq yd)", 0.83612736); public static final Unit ACRE = new Unit("Acre (ac)", 4046.8564224); public static final Unit SQUARE_MILE = new Unit("Square Mile (sq mi)", 2589988.110336); /* * Volume */ public static final Unit MILLILITRE = new Unit("Millilitre (mL)", 0.000001); public static final Unit LITRE = new Unit("Litre (L)", 0.001); public static final Unit CUBIC_MILLIMETRE = new Unit("Cubic Millimetre (mm3)", .000000001); public static final Unit CUBIC_CENTIMETRE = new Unit("Cubic Centimetre (cm3)", 0.000001); public static final Unit CUBIC_DECIMETRE = new Unit("Cubic Decimetre (dm3)", 0.001); public static final Unit CUBIC_METRE = new Unit("Cubic Metre (m3)", 1); public static final Unit FLUID_OUNCE = new Unit("Fluid Ounce (fl oz)", 0.0000284131); public static final Unit GILL = new Unit("Gill (gi)", 0.000142065); public static final Unit PINT = new Unit("Pint (pt)", 0.000568261); public static final Unit QUART = new Unit("Quart (qt)", 0.00113652); public static final Unit GALLON = new Unit("Gallon (gal)", 0.00454609); /* * Mass */ public static final Unit MILLIGRAM = new Unit("Milligram (mg)", 0.000001); public static final Unit GRAM = new Unit("Gram (g)", 0.001); public static final Unit KILOGRAM = new Unit("Kilogram (kg)", 1); public static final Unit TONNE = new Unit("Tonne (t)", 1000); public static final Unit GRAIN = new Unit("Grain (gr)", 0.0000647989); public static final Unit OUNCE = new Unit("Ounce (oz)", 0.0283495); public static final Unit POUND = new Unit("Pound (lb)", 0.45359237); public static final Unit STONE = new Unit("Stone (st)", 6.35029318); public static final Unit HUNDREDWEIGHT = new Unit("Hundredweight (cwt)", 50.80234544); public static final Unit TON = new Unit("Ton (ton)", 1016.0469088); /* * Velocity */ public static final Unit METRE_PER_SECOND = new Unit("Metre per second (m/s)", 3.6); public static final Unit KILOMETRE_PER_HOUR = new Unit("Kilometre per hour (km/h)", 1); public static final Unit FOOT_PER_SECOND = new Unit("Foot per second (fps)", 1.09728); public static final Unit MILE_PER_HOUR = new Unit("Mile per hour (mph)", 1.609344); public static final Unit KNOT = new Unit("Knot (kn)", 1.852); /* * Pressure */ public static final Unit PASCAL = new Unit("Pascal (Pa)", 1); public static final Unit HECTOPASCAL = new Unit("Hectopascal (hPa)", 100); public static final Unit KILOPASCAL = new Unit("Kilopascal (kPa)", 1000); public static final Unit MILLIBAR = new Unit("Millibar (mbar)", 100); public static final Unit BAR = new Unit("Bar (bar)", 100000); public static final Unit MILLIMETRE_OF_MERCURY = new Unit("Millimetre of mercury (mmHg)", 133.322); public static final Unit ATMOSPHERE = new Unit("Atmosphere (Atm)", 101325); public static final Unit PSI = new Unit("Pound-force per sq in (psi)", 6894); public static final Unit INCH_OF_MERCURY = new Unit("Inch of mercury (inHg)", 3386.389); /* * Power */ public static final Unit MILLIWATT = new Unit("Milliwatt (mW)", 0.001); public static final Unit WATT = new Unit("Watt (W)", 1); public static final Unit KILOWATT = new Unit("Kilowatt (kW)", 1000); public static final Unit MEGAWATT = new Unit("Megawatt (MW)", 1000000); public static final Unit HORSEPOWER = new Unit("Horsepower (HPS)", 745.69987158227022); /* * Energy */ public static final Unit WATT_HOUR = new Unit("Watt hour (W h)", 3600); public static final Unit KILOWATT_HOUR = new Unit("Kilowatt hour (kW h)", 3600000); public static final Unit JOULE = new Unit("Joule (J)", 1); public static final Unit CALORIE = new Unit("calorie (cal)", 4.1868); /* * Linear Density */ public static final Unit DOTS_PER_INCH = new Unit("Dots per inch (DPI)", 1); public static final Unit DOTS_PER_CENTIMETRE = new Unit("Dots per centimetre (dpcm)", 2.54); /* * Angle */ public static final Unit RADIAN = new Unit("Radian (rad)", 1); public static final Unit DEGREE = new Unit("Degree (deg)", 0.0174532929); public final String name; private final double ratio; private final double a; private final double x; public Unit(final String name, final double ratio, final double a, final double x) { this.name = name; this.ratio = ratio; this.a = a; this.x = x; } public Unit(final String name, final double ratio) { this(name, ratio, 0, 1); } /** * Converts quantity from one unit to another unit * @param quantity the quantity in the initial units * @param from the initial units * @param to the units after conversion * @return the quantity in the units after conversion */ public static double convert( final double quantity, final Unit from, final Unit to) { return to.inSpecUnits(from.inBaseUnits(quantity)); } private double inBaseUnits(final double inSpecUnits) { return (ratio * inSpecUnits + a) * x; } private double inSpecUnits(final double inBaseUnits) { return (inBaseUnits - (a * x)) / (ratio * x); } }