An affine unit – the most common case being a unit that is related to other
units representing the same physical quantity not by a scale factor, but by
a shift in the zero point.
This is not a fundamentally new concept, adding a constant offset could
just be implemented in a custom conversion function as well (see the
UnitImpl documentation). However, Quantity is specialized on
affine units such as to only provide operations which make sense for them:
Informally speaking, an affine space is a vector space which »forgot« its
origin, its elements are points, not vectors. Thus, a quantity of an
affine unit cannot be added to another (as it makes no sense to add two
points), but like vectors can be added to points to yield a new point, a
quantity of the underlying base unit can be. Also, two affine quantities
can be substracted to yield a quantity of the base unit (just as two
points can be substracted to get a vector pointing from one to another).
The most common example for this are units of temperature like degrees
Celsius or Fahrenheit, as demonstrated below.
structAffineUnit(BaseUnit, alias toBaseOffset, string name, string symbol = null)
An affine unit – the most common case being a unit that is related to other units representing the same physical quantity not by a scale factor, but by a shift in the zero point.
This is not a fundamentally new concept, adding a constant offset could just be implemented in a custom conversion function as well (see the UnitImpl documentation). However, Quantity is specialized on affine units such as to only provide operations which make sense for them:
Informally speaking, an affine space is a vector space which »forgot« its origin, its elements are points, not vectors. Thus, a quantity of an affine unit cannot be added to another (as it makes no sense to add two points), but like vectors can be added to points to yield a new point, a quantity of the underlying base unit can be. Also, two affine quantities can be substracted to yield a quantity of the base unit (just as two points can be substracted to get a vector pointing from one to another).
The most common example for this are units of temperature like degrees Celsius or Fahrenheit, as demonstrated below.