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

ucar.units.UnitDimension Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 1998-2018 University Corporation for Atmospheric Research/Unidata
 * See LICENSE for license information.
 */
package ucar.units;


import javax.annotation.concurrent.Immutable;

/*
 * Provides support for the concept of the dimension of a unit. The
 * dimension of a unit is like the dimension of a quantity except that
 * the individual quantity dimensions have been replaced with the
 * corresponding base unit. For example, the dimension of the quantity
 * "force" is "M.L.t-2" and the dimension of the corresponding SI unit
 * (the "newton") is "kg.m.s-2".
 *
 * Instances of this class are immutable.
 *
 * @author Steven R. Emmerson
 */
@Immutable
public final class UnitDimension extends Dimension {
  /**
   * Constructs a dimensionless unit dimension.
   */
  public UnitDimension() {
    super();
  }

  /**
   * Constructs the unit dimension corresponding to a base unit.
   * 
   * @param baseUnit A base unit.
   */
  public UnitDimension(BaseUnit baseUnit) {
    super(new Factor(baseUnit));
  }

  /**
   * Constructs a unit dimension comprised of the given factors.
   * 
   * @param factors The factors that constitute the unit dimension.
   */
  private UnitDimension(Factor[] factors) {
    super(factors);
  }

  /**
   * Multiplies this unit dimension by another.
   * 
   * @param that The other unit dimension.
   * @return The product of this unit dimension multiplied
   *         by the other.
   */
  public UnitDimension multiplyBy(UnitDimension that) {
    return new UnitDimension(mult(that));
  }

  /**
   * Divides this unit dimension by another.
   * 
   * @param that The other unit dimension.
   * @return The quotient of this unit dimension divided
   *         by the other.
   */
  public UnitDimension divideBy(UnitDimension that) {
    return multiplyBy(that.raiseTo(-1));
  }

  /**
   * Raises this unit dimension to a power.
   * 
   * @param power The power.
   * @return The result of raising this unit dimension
   *         to the power.
   */
  public UnitDimension raiseTo(int power) {
    return new UnitDimension(pow(power));
  }

  /**
   * Returns the corresponding quantity dimension.
   * 
   * @return The quantity dimension corresponding to this
   *         unit dimension.
   */
  public QuantityDimension getQuantityDimension() {
    Factor[] factors = getFactors();
    for (int i = factors.length; --i >= 0;) {
      Factor factor = factors[i];
      factors[i] = new Factor(((BaseUnit) factor.getBase()).getBaseQuantity(), factor.getExponent());
    }
    return new QuantityDimension(factors);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy