|
Boost : |
From: Reece Dunn (msclrhd_at_[hidden])
Date: 2004-01-08 19:15:04
Andy Little wrote:
>Documentation and link to a download, for my lib can be found here. :
>http://www.servocomm.freeserve.co.uk/Cpp/physical_quantity/index.html
Cool. I'll look into the library.
As far as I can see, there are several areas that a quantities library must
deal with. The basic concepts are:
Unit -- A type of value that has an associated property; the unit will have
a name and may also have an associated symbol;
Base Unit -- A unit whose type is orthogonal with other non-derived units;
it is used to derive other units - this is a closed set;
Base Set -- A set of base units that fully describe the problem domain
considered e.g. the SI base units form a base set
Derived Units -- A unit that is constructed from other units and can be
expressed in terms of the base units e.g. area, acceleration;
Derived Set -- The set of unit types that can be constructed from the base
set - this is an open set
Prefixes -- A set of powers that express the size magnitude of the value to
a base unit (e.g. micro; milli; tera; giga for base 10 and bit; byte; kibi;
tebi for binary). NOTE: these could (and should) be expressed within a
constants framework.
Unit System -- A system of units that consists of a base set and a derived
set
Ideally, prefixes should be expressed seperately, allowing for easy
conversion between types with different prefixes (cm -> km, etc.), e.g.:
typedef unit::declare< unit::si::length, unit::prefix::mili > mm;
It should be possible to express base units as an orthogonal group of
dimensions in a unit system, e.g.:
typedef unit::dimension< unit::system::si_units, 1 > length;
typedef unit::declare< unit::si::length > meter; // no prefix
Derived units should be composable from base units:
typedef unit::derived< unit::power< unit::si::length, 1 >, unit::power<
unit::si::time, -1 > >
speed;
I am not sure how you would then compose cm / hour, or prefix other derived
units within this system.
SI::mass (kilogram) is unusual, since it is prefixed -- the base unit is the
gram with an associated prefix. Also, units like hours (60 * 60 * second)
are somewhere between being a derived unit and a prefix (since it is a
multiple of the base unit).
static const int hours = 60 * 60; // seconds : hour
static const float kilo = 10e3;
The units system should allow something like:
si::speed s = 7 * si::m / si::s;
si::acceleration g = 9.2 * si::m / si::s_2; // si::s_2 = si::s * si::s
// ...
s *= g; // increase speed
Regards,
Reece
_________________________________________________________________
Stay in touch with absent friends - get MSN Messenger
http://www.msn.co.uk/messenger
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk