(sorry for the ugly formatting on previous message; here is
a resend)
A RealTupleType "has-a" default Coordinate System. What does
that mean? If you think of a coordinate system as a "way of
naming the elements in a set", and a RealTupleType is Rn,
then the product of the coordinates on each component is a
coordinate system, and the obvious "default".
(see
http://www.unidata.ucar.edu/staff/caron/CoordMath2.htm )
We do need a reference coordinate system, and a way to
transform between the coordinate system defined by the
RealTupleType and the reference coordinate system. The
CoordinateSystem class thus is defined for that purpose,
adding coordinate transform methods. A RealTupletype and
its CoordinateSystem are pretty intimately connected,
otherwise the transform will be wrong. So why are they
separate? I think that Bill's design factors out the Units
transformation, so that RealTupletypes with different units
can share the same CoordinateSystem. Also you might want to
define a RealTupleType without defining a reference coord
system.
The DefaultCoordinateSystem then doesn't actually define
the default coordinate system, but rather the transformation
of the default to a reference coord system. CoordinateSystem
might be better named CoordinateTransformation or something
like that. The coordinate system is actually the
RealTupleType . From that perspective, it makes sense that
a CoordinateTransformation (aka CoordinateSystem) object
"has-a" reference RealTupleType (which is really a
coordinate system).
Now if that's true, the CoordinateTransformation (aka
CoordinateSystem) is bound to its reference RealTupleType.
Yet the reference is passed in at initialization, rather
than being a final static field in the class. But if you
look at SphericalCordinateSystem.java, that field in never
used and the method toReference() assumes yoe are converting
to the cartesian coord system.
It's possible (likely?) I'm missing something, but to
finish where this direction is going:
1) Since coordinate transformations are functions that
depend on both domain and range coordinate systems, you have
to define them at compile time (by coding up the correct
methods), so the toReference() methods are really class
methods, and no reference field should be passed in to the
initializer.
2) It doesn't appear that there is any chaining of coord
transformations, and there's likely a way to do so if we
needed that.