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

javax.measure.unit.Dimension Maven / Gradle / Ivy

The newest version!
/*
 * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences.
 * Copyright (C) 2006 - JScience (http://jscience.org/)
 * All rights reserved.
 * 
 * Permission to use, copy, modify, and distribute this software is
 * freely granted, provided that this notice is preserved.
 */
package javax.measure.unit;

import java.io.Serializable;

import javax.measure.converter.RationalConverter;
import javax.measure.converter.UnitConverter;
import javax.measure.quantity.Dimensionless;

/**
 * 

This class represents the dimension of an unit. Two units u1 * and u2 are {@link Unit#isCompatible compatible} if and * only if (u1.getDimension().equals(u2.getDimension()))) *

* *

Instances of this class are immutable.

* * @author Jean-Marie Dautelle * @version 3.1, April 22, 2006 * @see * Wikipedia: Dimensional Analysis */ public final class Dimension implements Serializable { /** * Holds the current physical model. */ private static Model CurrentModel = Model.STANDARD; /** * Holds dimensionless. */ public static final Dimension NONE = new Dimension(Unit.ONE); /** * Holds length dimension (L). */ public static final Dimension LENGTH = new Dimension('L'); /** * Holds mass dimension (M). */ public static final Dimension MASS = new Dimension('M'); /** * Holds time dimension (T). */ public static final Dimension TIME = new Dimension('T'); /** * Holds electric current dimension (I). */ public static final Dimension ELECTRIC_CURRENT = new Dimension('I'); /** * Holds temperature dimension (θ). */ public static final Dimension TEMPERATURE = new Dimension('θ'); /** * Holds amount of substance dimension (N). */ public static final Dimension AMOUNT_OF_SUBSTANCE = new Dimension('N'); /** * Holds the pseudo unit associated to this dimension. */ private final Unit _pseudoUnit; /** * Creates a new dimension associated to the specified symbol. * * @param symbol the associated symbol. */ public Dimension(char symbol) { _pseudoUnit = new BaseUnit("[" + symbol + "]"); } /** * Creates a dimension having the specified pseudo-unit * (base unit or product of base unit). * * @param pseudoUnit the pseudo-unit identifying this dimension. */ private Dimension(Unit pseudoUnit) { _pseudoUnit = pseudoUnit; } /** * Returns the product of this dimension with the one specified. * * @param that the dimension multiplicand. * @return this * that */ public final Dimension times(Dimension that) { return new Dimension(this._pseudoUnit.times(that._pseudoUnit)); } /** * Returns the quotient of this dimension with the one specified. * * @param that the dimension divisor. * @return this / that */ public final Dimension divide(Dimension that) { return new Dimension(this._pseudoUnit.divide(that._pseudoUnit)); } /** * Returns this dimension raised to an exponent. * * @param n the exponent. * @return the result of raising this dimension to the exponent. */ public final Dimension pow(int n) { return new Dimension(this._pseudoUnit.pow(n)); } /** * Returns the given root of this dimension. * * @param n the root's order. * @return the result of taking the given root of this dimension. * @throws ArithmeticException if n == 0. */ public final Dimension root(int n) { return new Dimension(this._pseudoUnit.root(n)); } /** * Returns the representation of this dimension. * * @return the representation of this dimension. */ public String toString() { return _pseudoUnit.toString(); } /** * Indicates if the specified dimension is equals to the one specified. * * @param that the object to compare to. * @return true if this dimension is equals to that dimension; * false otherwise. */ public boolean equals(Object that) { if (this == that) return true; return (that instanceof Dimension) && _pseudoUnit.equals(((Dimension) that)._pseudoUnit); } /** * Returns the hash code for this dimension. * * @return this dimension hashcode value. */ public int hashCode() { return _pseudoUnit.hashCode(); } /** * Sets the model used to determinate the units dimensions. * * @param model the new model to be used when calculating unit dimensions. */ public static void setModel(Model model) { Dimension.CurrentModel = model; } /** * Returns the model used to determinate the units dimensions * (default {@link Model#STANDARD STANDARD}). * * @return the model used when calculating unit dimensions. */ public static Model getModel() { return Dimension.CurrentModel; } /** * This interface represents the mapping between {@link BaseUnit base units} * and {@link Dimension dimensions}. Custom models may allow * conversions not possible using the {@link #STANDARD standard} model. * For example:[code] * public static void main(String[] args) { * Dimension.Model relativistic = new Dimension.Model() { * RationalConverter meterToSecond = new RationalConverter(1, 299792458); // 1/c * * public Dimension getDimension(BaseUnit unit) { * if (unit.equals(SI.METER)) return Dimension.TIME; * return Dimension.Model.STANDARD.getDimension(unit); * } * * public UnitConverter getTransform(BaseUnit unit) { * if (unit.equals(SI.METER)) return meterToSecond; * return Dimension.Model.STANDARD.getTransform(unit); * }}; * Dimension.setModel(relativistic); * * // Converts 1.0 GeV (energy) to kg (mass). * System.out.println(Unit.valueOf("GeV").getConverterTo(KILOGRAM).convert(1.0)); * } * * > 1.7826617302520883E-27[/code] */ public interface Model { /** * Holds the standard model (default). */ public Model STANDARD = new Model() { public Dimension getDimension(BaseUnit unit) { if (unit.equals(SI.METRE)) return Dimension.LENGTH; if (unit.equals(SI.KILOGRAM)) return Dimension.MASS; if (unit.equals(SI.KELVIN)) return Dimension.TEMPERATURE; if (unit.equals(SI.SECOND)) return Dimension.TIME; if (unit.equals(SI.AMPERE)) return Dimension.ELECTRIC_CURRENT; if (unit.equals(SI.MOLE)) return Dimension.AMOUNT_OF_SUBSTANCE; if (unit.equals(SI.CANDELA)) return SI.WATT.getDimension(); return new Dimension(new BaseUnit("[" + unit.getSymbol() + "]")); } public UnitConverter getTransform(BaseUnit unit) { if (unit.equals(SI.CANDELA)) return new RationalConverter(1, 683); return UnitConverter.IDENTITY; } }; /** * Returns the dimension of the specified base unit (a dimension * particular to the base unit if the base unit is not recognized). * * @param unit the base unit for which the dimension is returned. * @return the dimension of the specified unit. */ Dimension getDimension(BaseUnit unit); /** * Returns the normalization transform of the specified base unit * ({@link UnitConverter#IDENTITY IDENTITY} if the base unit is * not recognized). * * @param unit the base unit for which the transform is returned. * @return the normalization transform. */ UnitConverter getTransform(BaseUnit unit); } private static final long serialVersionUID = 1L; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy